2017-10-18 1 views
0

약간의 모의 객체가 있습니다. 약간의 주위를 지나치게 복잡해지기 쉽습니다.예기치 않은 전화가 걸렸을 때 Mockito mock이 실패하게하려면 어떻게해야합니까?

Mockito는 모의 각 통화에 대한 로그를 출력하고 싶습니다. 예기치 않은 전화가 걸려 올 때마다 실패하고 싶습니다. 전화를 반복하고 적절한 응답을 설정할 수 있습니다.

어떻게하면됩니까?

+0

모의을 확인하지 않는 이유는 무엇입니까? – Mureinik

답변

1

이 일의 가장 관용적 인 방법은 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에 익숙한 개발자는이 예외 가능성이있는 치료법이이 질병보다 더 나쁘다고 말하고, 가장 엉킨 레거시 코드를 일시적으로 진단하는 데 유용 할 수 있습니다.

0

흐름을 추적하려는 경우 특정 호출이 있었는지 확인하기 위해 Mockito verify를 사용할 수 있습니다.

verify(yourMockedObject).yourMethod(); 

특정 전화를 정확히 몇 번해야하는지 확인하는 데 시간을 사용할 수도 있습니다.

verify(yourMockedObject, times(4)).yourMethod(); 

단위 테스트를 복잡하게 만드는 것은 좋지 않습니다. 한 번에 작은 단위의 코드 만 테스트 해보십시오.

관련 문제