MockitoJUnitRunner
프레임 워크 사용에 대한 자동 유효성 검사와 자동 initMocks()
.
프레임 워크 사용에 대한 자동 유효성 검사는 실제로 가치가 있습니다. 이러한 실수 중 하나를 범하면 더 나은보고를 할 수 있습니다.
당신은 정적 호출 when
방법을하지만, 일치와 스터 빙을 완료하지 않는 thenReturn
, thenThrow
또는 then
. (아래 코드의 오류 1)
verify
모의 객체를 호출 하지만 확인하려는 메서드 호출을 제공하는 것을 잊었습니다. (아래 코드의 오류 2)
당신은 전화 when
후 방법을 doReturn
, doThrow
또는
doAnswer
및 모의을 통과,하지만 당신은 스텁하려고하는하는 방법을 제공하는 것을 잊지. (아래 코드의 오류 3)
프레임 워크 사용에 대한 유효성 검사가없는 경우 Mockito 메서드에 대한 다음 호출이 발생할 때까지 이러한 실수가보고되지 않습니다 . 이것은
- 동일한 테스트 방법 (아래 오류 1과 같음)에서
- 다음 테스트 방법 (아래 오류 2와 같음)에서
- 다음 시험 수업에서.
실행 한 마지막 테스트에서 발생하는 경우 (아래의 오류 3과 같이) 전혀보고되지 않습니다.
이러한 각 유형의 오류가 표시되는 방식은 다음과 같습니다. JUnit이 여기에 나열된 순서대로 이러한 테스트를 실행한다고 가정합니다.
@Test
public void test1() {
// ERROR 1
// This compiles and runs, but it's an invalid use of the framework because
// Mockito is still waiting to find out what it should do when myMethod is called.
// But Mockito can't report it yet, because the call to thenReturn might
// be yet to happen.
when(myMock.method1());
doSomeTestingStuff();
// ERROR 1 is reported on the following line, even though it's not the line with
// the error.
verify(myMock).method2();
}
@Test
public void test2() {
doSomeTestingStuff();
// ERROR 2
// This compiles and runs, but it's an invalid use of the framework because
// Mockito doesn't know what method call to verify. But Mockito can't report
// it yet, because the call to the method that's being verified might
// be yet to happen.
verify(myMock);
}
@Test
public void test3() {
// ERROR 2 is reported on the following line, even though it's not even in
// the same test as the error.
doReturn("Hello").when(myMock).method1();
// ERROR 3
// This compiles and runs, but it's an invalid use of the framework because
// Mockito doesn't know what method call is being stubbed. But Mockito can't
// report it yet, because the call to the method that's being stubbed might
// be yet to happen.
doReturn("World").when(myMock);
doSomeTestingStuff();
// ERROR 3 is never reported, because there are no more Mockito calls.
}
이제 5 년 전에이 답변을 처음 썼을 때
그래서 MockitoJUnitRunner
가능한 한 사용을 권장 합니다. 그러나 Tomasz Nurkiewicz가 올바르게 지적했듯이 Spring과 같은 다른 JUnit 실행기가 필요한 경우 사용할 수 없습니다.
이제 내 추천이 변경되었습니다. Mockito 팀은이 답변을 처음 작성한 이후로 새로운 기능을 추가했습니다. .NET Framework와 정확히 동일한 기능을 수행하는 JUnit 규칙 MockitoJUnitRunner
입니다. 그러나 다른 주자의 사용을 배제하지 않기 때문에 더 좋습니다.
포함
@Rule
public MockitoRule rule = MockitoJUnit.rule();
시험 수업에서. 이것은 모의를 초기화하고 프레임 워크 유효성 검사를 자동화합니다. 그렇습니다 MockitoJUnitRunner
. 하지만 이제는 SpringJUnit4ClassRunner
또는 다른 JUnitRunner도 사용할 수 있습니다 . Mockito 2.1.0부터는보고되는 문제의 종류를 정확하게 제어하는 추가 옵션이 있습니다.