2012-10-31 5 views
11

클래스의 여러 void 메서드를 호출하는 void 메서드를 테스트하고 있습니다.이 메서드는 모두 같은 클래스에 있습니다. 방법은Mockito의 void 메서드 내에서 여러 void 메서드 호출을 무시하는 방법

public void methodToTest() { 
    methodA(); 
    methodB(); 
} 

void methodA() { 
    methodA1(); 
    methodA2(); 
    methodA3(); 
} 

는 내가 뭘하려는 것은 아무것도하지 않는 이상 methodA()의 원인입니다 ...이 라인을 따라 뭔가입니다. 나는 아무 소용 methodA()에 모두 doThrow()doAnswer()을 시도했습니다

void methodA() { } 

: 그건 내가 methodA()은 기본적으로 다음과 같이되고 싶어한다. 그것들은 완전히 무시당하는 것처럼 보입니다.

내가 무엇을 시도했다의 예

...
doThrow(new RuntimeException()).when(mockedClass).methodA(); 

는 Mockito를 사용하여이 할 수있는 방법이 있나요? 나는 수정중인 수업을 변경할 자유가 없다.

+1

'methodA'가 '최종'이 아닌지 확인하십시오. – Brice

+0

'methodA'가'final'이 아닙니다 –

+1

부분적 모의를하고 싶거나,'methodA'를 실행하는 중에'methodB' 만 실행하고 싶은 것처럼 스 니펫을 뒤돌아 보는 것이 좋습니다. 당신은 가장 확실하게'mock (YourObject.class)'를 사용하고 있습니다. 물론 모의 객체는 아무것도하지 않으며, 절대 실제 코드를 실행하지 않을 것입니다. 기본적으로 실제 코드를 실행할 스파이 (YourObject.class)가 원하는 것을 얻을 수 있습니다. 그러나 부분적인 모의는 테스트 냄새로 인식됩니다. 디자인 냄새가 아니라면,'methodA'의 행동을 API에서'AStrategy'처럼 드러 낼 수있는 의존성으로보아야합니다. – Brice

답변

18

methodB를 계속 실행하려는 경우 methodA는 아무 작업도 수행하지 않습니다. 그러면 다음과 같이됩니다 :

TestClass spy = spy(new TestClass()); 
doNothing().when(spy).methodA(); 
spy.methodToTest(); 
+0

위의 내용을 언급하지는 않았지만 실제로 귀하의 사례에 나와있는 것처럼 스파이를 사용하고 있습니다. 내 클래스 에서이 정확한 코드를 시도하고 methodA()의 내부는 내가 피하려고 노력하고있는 여전히 실행되고있다 ... –

+1

'doNothing().()'의 거꾸로 된 표기법을 사용하고 있습니까? 또는'when(). thenReturn()'표기법을 사용하고 있습니까? 후자의 형식은 실제로 코드 행이 호출 될 때 (즉, 부분 모의의 대체 동작이 변경 될 때) 스파이에서 실제 메소드를 호출하며, 이는 문제를 일으킬 수 있습니다. 그러므로 그 문제를 피하기 위해 스파이에 대한 전 doNothing 표기법을 사용할 필요가있다. –

+0

@KevinWelker - 나는 doNothing(). when()을 사용하고있다. –

관련 문제