2017-10-27 1 views
3

Mockito (버전 2 이후)는 사용되지 않는 스터핑을 감지합니다. 이는 일반적으로 매우 좋은 것입니다.불필요한 스터 빙 예외를 로컬에서 제외합니다.

result = foo(1) || foo(2); // generally: true if any input is true 

과 stubbings :

when(foo(1)).return(true); 
when(foo(2)).return(false); 

는 이제 foo(2)이 불필요 스텁됩니다

이제 다음 코드를 고려하십시오. 그러나 원래 코드에서 약간의 리팩토링으로 변경 될 수 있습니다 (표현식을 foo(2) || foo(1)으로 변경). 이 경우 입력이 true이면 결과가 true인지 확인하기 위해 스터 빙을 남겨두고 싶습니다. (짧은 커팅은 필요하지 않지만 가능한 것은 물론, 실제 코드가 훨씬 더 복잡하다는 가정하에).

이제 내 질문 : 그 우아한 방법은 무엇입니까? 단일 스터핑에 적합합니까? 러너로 MockitoJUnitRunner.Silent을 사용하면 전체 테스트 클래스에 대한 경고가 표시되지 않습니다.

답변

1

어떻게 할 수 있습니까? 단일 스터핑에 적합합니까?

두 개의 별개 호출을 불러내는 동안 그 중 하나만 호출하면 의미있는 단위 테스트가 제공되지 않는다고 생각합니다.

나는 것을 읽을 때 :

result = foo(1) && foo(2); 

하지 :

when(foo(1)).return(true); 
when(foo(2)).return(true); 

내가 코드에서 그런 일 것으로 예상 result = foo(1) || foo(2);

귀하의 경우를, 내가이있을 것 테스트 된 메소드에 대한 별개의 호출 (가독성에 따라 하나 또는 두 개의 테스트에서) 그리고 각각에 대해 나는 단지를 모의합니다.두 가지 모두 호출이 아닙니다.

MockitoJUnitRunner.Silent를 러너로 사용하면 전체 테스트 클래스에 대해 경고 이 표시되지 않습니다.

개인적으로 테스트 코드 품질을 향상시킬 수있는 반면 경고를 숨기려는 생각은별로 좋아하지 않습니다. 주자의 구현을 사용

을하지 않는 것이 좋습니다 :


는 약 MockitoJUnitRunner.Silent, 당신은 그 (강조는 광산을) 읽을 수 있습니다. 엔지니어 은 사용하지 않은 스터브를 제거하는 데주의해야합니다. 왜냐하면 코드가 불량 코드이기 때문에 불필요한 세부 정보가 추가되어 테스트 코드가 더 복잡해지게됩니다. . 침묵하는 러너를 사용해야하는 좋은 이유가 있다면 메일 링리스트에 알려 주시거나 이슈 트래커에 문제를 제기하십시오. 참고 사항 UnnecessaryStubbingException

+0

이 대답은 내 질문에 대답하지 않습니다. 나는 MockitoJUnitRunner.Silent와 함께 제공되는 JavaDoc을 읽을 수 있으며 내 질문 자체가 내 선호하는 해결책이 아니라는 것을 분명히했다. 그러나 아마도 당신의 경고는 그것을 생각하지 않은 사람들에게 유용 할 것입니다. –

+0

정말입니까? 당신은 "그것을하는 우아한 방법은 무엇입니까? 단일 스터핑을 선호합니까?" 내 대답은이 점들을 다룹니다. – davidxxx

관련 문제