2014-01-14 7 views
0

Mockito로 jUnit 테스트를 시작했습니다.void 메서드가 호출되었는지 확인하십시오.

매개 변수로 ArrayList를 사용하는 메서드를 테스트해야합니다. 이 메서드에는 Runtimes 실행을 실행하는 다른 클래스가 있습니다. 그래서 Jenkins에서 실패하기를 원하기 때문에 (Jenkins가 Linux에서 실행되기 때문에) Runtime 실행으로 클래스를 조롱해야합니다.

먼저 두 클래스 :
HandleInformation testClass;, 클래스가 XFDHandlerProd

이라고 런타임 실행에
XFDHandler test; 인터페이스를 testet 될 클래스는 그래서 일단 내가 런타임 클래스 조롱 :

test = Mockito.mock(XFDHandlerProd.class); 

4 가지 방법은 모두 공법- 방법입니다. 따라서 official doc을 이해하면 메서드 자체가 아무 것도 수행하지 않아야합니다. 올바르게 :

나는의 TestClass에 빈 목록을 보낼 때, 그것은의 빈 메소드를 호출 할 필요
@Test 
public void testNullList() throws IOException, InterruptedException { 
    ArrayList<Info> nullArray = new ArrayList<Info>(); 

    testClass.handleInformation(nullArray); 
    Mockito.verify(test, Mockito.times(1)).turnOnBlue(); 
} 

런타임 클래스 turnOnBlue(); :

Beware that void methods on mocks do nothing by default!

그래서 나는 내 첫 번째 테스트를 할 수 있습니다 . 그리고 내가 아는 한, verify 메서드를 사용하면 메서드가 실제로 호출되었는지 확인할 수 있습니다.

는하지만 지금 테스트를 실행할 때, 나는 다음과 같은 오류 얻을 것이다 :

Wanted but not invoked: xFDHandlerProd.turnOnBlue();
-> at com.example.example.business.HandleInformationTest.testNullList(HandleInformationTest.java:44)
Actually, there were zero interactions with this mock.

그리고 라인 # 44 이제 내가 '모르는 Mockito.verfiy()

와 라인 잘못하고있다. 나는 내가 XFDHandler의 다른 인스턴스를 사용하는 HandleInformation 클래스에서 사용하는, 그래서 Mockito 어떤 활동을 볼 수 없습니다 becuase


생각
는 통신 제로인가?
그렇다면 HandleInformation 클래스의 메서드를 변경하지 않고 Mockito 클래스 테스트에서 어떻게 사용할 수 있습니까?

+0

'testClass'에 'test'인스턴스를 주입/설정하고 있습니까? XFDHandler를 위해 생성 된 모의 객체를 HandleInformation 클래스에 삽입해야 할 필요가 있을지도 모르겠다. HandleInformation 클래스는 어떻게 인스턴스화됩니까? – Saket

+0

'testClass' 객체를 어떻게 설정하는지 보여주는 코드를 추가 할 수 있습니까? – Jonathan

+1

음, 그건 null 배열이 아니에요, 그건 _empty_ 배열입니다. 차이가 있습니다. 아니 정말로 당신의 문제 (또는 적어도, 나는 그것을 의심). –

답변

1

colaborator를 매개 변수로 전달해야 할 것 같습니다. 이는 다음과 같은 것을 필요로 함을 의미합니다.

XFDHandler test = Mockito.mock(XFDHandlerProd.class); 
HandleInformation testClass = new HandleInformation(test); 

그러면 테스트가 작동합니다.

, BTW 나는 제거 할 Mockito.times (1)의 기본 동작 때문에

+0

바로 그. 고마워. 그리고 예, 방금 문서에서 보았습니다. 제거 할 수 있습니다. 건배 –

0

당신은 메서드 매개 변수로 전달할 세터 또는 생성자를 사용하거나 테스트중인 개체로 조롱 개체를 삽입해야 mockito가 수 있도록 테스트 할 객체가 조롱 된 객체 메소드를 호출 할 때 이해하기

관련 문제