약간의 모의 객체가 있습니다. 약간의 주위를 지나치게 복잡해지기 쉽습니다.예기치 않은 전화가 걸렸을 때 Mockito mock이 실패하게하려면 어떻게해야합니까?
Mockito는 모의 각 통화에 대한 로그를 출력하고 싶습니다. 예기치 않은 전화가 걸려 올 때마다 실패하고 싶습니다. 전화를 반복하고 적절한 응답을 설정할 수 있습니다.
어떻게하면됩니까?
약간의 모의 객체가 있습니다. 약간의 주위를 지나치게 복잡해지기 쉽습니다.예기치 않은 전화가 걸렸을 때 Mockito mock이 실패하게하려면 어떻게해야합니까?
Mockito는 모의 각 통화에 대한 로그를 출력하고 싶습니다. 예기치 않은 전화가 걸려 올 때마다 실패하고 싶습니다. 전화를 반복하고 적절한 응답을 설정할 수 있습니다.
어떻게하면됩니까?
이 일의 가장 관용적 인 방법은 Mockito docs #8 같이 verifyNoMoreInteractions
함께 :
//interactions
mock.doSomething();
mock.doSomethingUnexpected();
//verification
verify(mock).doSomething();
//following will fail because 'doSomethingUnexpected()' is unexpected
verifyNoMoreInteractions(mock);
내가 그 방법은 블로그 게시물에 대한 링크 자신의 경고 라벨을 가지고 위 때문에 "가장 관용적"라고
"Should I worry about the unexpected?" Mockito 발신자 Szczepan Faber.
verifyNoMoreInteractions()
은 모든 테스트 방법에서 사용하지 않는 것이 좋습니다.verifyNoMoreInteractions()
은 상호 작용 테스트 툴킷에서 얻은 간단한 어설입니다. 관련성이있는 경우에만 사용하십시오. 그것을 악용하면 이 덜 지정되고 덜 유지 보수 가능합니다. 테스트. 한마디로
, 당신은 당신의 의존성이 이을 수행하지 않거나 그들이 무엇을하고 호출하는 것과 반대로 시스템 테스트 대상이 무엇인지 는를 호출하지 무엇인지 확인하는 아주 명확한 이유가 있어야합니다. 불필요한 RPC 호출은 피하고 부작용이없는 계산기는 말하지 않으려면 RPC 객체에 verifyNoMoreInteractions
을 사용할 수 있습니다. never()
또는 times(int)
으로 정확한 요구 사항을 지정하여 verify
의 매개 변수로 지정하는 것이 더 좋습니다.
당신은 mockingDetails(Object)
을 사용하고 getInvocations()
을 반복하게 통화의 전체 로그를 수행 할 수 있습니다 말했다
모의 기본 행동을 통해 예외를 throw 할 수 있습니다. 즉, 누군가가 스텁하지 않은 것을 호출하면 테스트가 즉시 실패합니다.
// untested pseudocode
YourObject yourObject = Mockito.mock(YourObject.class, withSettings()
.defaultAnswer(invocation -> {
throw new UnsupportedOperationException(invocation.toString());
}));
물론, 그 일을 싶지만, 당신은 단지 (EasyMock's definition of "nice"를 사용하여, mocks are nice by default) Mockito의 핵심 원칙 중 하나를 위반되지 않을 것입니다,하지만 당신은 또한 doVerb
(doReturn
, doAnswer
을 사용하는 경우에만 스텁에 자신을 강제 것 , 등) when(yourObject.doAnything())
에 대한 호출은 when
에 대한 호출이 실행되기 전에 반드시 해당 예외를 throw해야하기 때문입니다.
Mockito에 익숙한 개발자는이 예외 가능성이있는 치료법이이 질병보다 더 나쁘다고 말하고, 가장 엉킨 레거시 코드를 일시적으로 진단하는 데 유용 할 수 있습니다.
흐름을 추적하려는 경우 특정 호출이 있었는지 확인하기 위해 Mockito verify를 사용할 수 있습니다.
verify(yourMockedObject).yourMethod();
특정 전화를 정확히 몇 번해야하는지 확인하는 데 시간을 사용할 수도 있습니다.
verify(yourMockedObject, times(4)).yourMethod();
단위 테스트를 복잡하게 만드는 것은 좋지 않습니다. 한 번에 작은 단위의 코드 만 테스트 해보십시오.
모의을 확인하지 않는 이유는 무엇입니까? – Mureinik