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 클래스 테스트에서 어떻게 사용할 수 있습니까?
'testClass'에 'test'인스턴스를 주입/설정하고 있습니까? XFDHandler를 위해 생성 된 모의 객체를 HandleInformation 클래스에 삽입해야 할 필요가 있을지도 모르겠다. HandleInformation 클래스는 어떻게 인스턴스화됩니까? – Saket
'testClass' 객체를 어떻게 설정하는지 보여주는 코드를 추가 할 수 있습니까? – Jonathan
음, 그건 null 배열이 아니에요, 그건 _empty_ 배열입니다. 차이가 있습니다. 아니 정말로 당신의 문제 (또는 적어도, 나는 그것을 의심). –