mockito 매처는 스텁 호출 또는 확인 호출의 외부에서 사용.
코드베이스에서 JUnit을 사용하는 경우 mockito 러너를 사용하는 것이 좋으며 각 테스트 방법에 대한 mockito 사용이 유효하다는 것을 의미합니다. 즉, 모든 문제가 잘못 작성된 테스트에 정확히 표시 될 수 있습니다.
@RunWith(MockitoJUnitRunner.class)
public class TheTest {
@Test public void shoudl_perform_something() { ... }
}
또는 (1.10.17부터)은 mockito 규칙 당신은 사용할 필요가 없습니다
public class TheTest {
@Rule MockitoRule mockitoRule = MockitoJUnit.rule();
@Test public void should_perform_something() { ... }
}
와
는이 프레임 워크 검증의 혜택을 테스트에
@Mock
의가 있습니다. 어쨌든 모두
MockitoAnnotations.initMocks(...)
또한
사용하는 mockito 버전에 비해 모의 객체를 인스턴스화하는 선호 방법입니다? 나는 Mockito가 나쁜 코드의 위치에 대한 메시지를 개선했다고 믿는다. mockito이 null
인 디폴트 값을 사용할 수 있도록 indProvider.asProvider()
이 스텁되지 않기 때문에이 코드가 제대로 작동하지 않을 수
참고. 당신은이 방법 중 하나를 수행해야합니다 (깊은 스텁 레거시 코드를 여기에, 모의를 반환 모의은 일반적으로 코드 냄새 간주되며 그것은 테스트 코드가 Law of Demeter 나누기 방송) :
@Mock(answer = RETURNS_DEEP_STUBS) Individual indProvider;
// ...
when(indProvider.asProvider().getProviderId()).thenReturn("795316051750");
또는 @ 응답으로 przemek, 그것은 더 장황하고 테스트 코드에서 동일한 약점을 보여줍니다.
@Mock(answer = RETURNS_DEEP_STUBS) Individual indProvider;
@Mock Provider provider;
// ...
when(indProvider.asProvider()).thenReturn(provider);
when(provider.getProviderId()).thenReturn("795316051750");
나는이 책 (
Growing Object Oriented Software Guided by Tests), 당신이 시험에 의해 인도 소프트웨어 작성에 대한 읽을 수있는 최고의 책 중 하나를 읽고 조언한다. 나는 악명 높은 Effective Java book보다 훨씬 더 중요하다고 생각한다.
나는 아직도 동일한 예외를 준다. –
이 답변은 저에게 상당히 합리적입니다. 오류가 matchers와 원시 값을 혼합하는 다른 테스트 코드에 대해보고되는지 궁금합니다. 종종 오류 메시지가 도움이 될 수 있으며 질문에 적용되지 않는 세부 정보를 제공합니다. 개인적으로 나는 Mockito에게 JMockit을 선호합니다. – unigeek