我被困在我的第一個與Mockito的jUnit測試。檢查是否有void方法被調用
我必須測試一個方法,它將ArrayList作爲參數。在這個方法中,會有另一個運行Runtimes執行的類。所以我需要用Runtime執行來嘲笑這個類,因爲他們想在Jenkins上失敗(因爲Jenkins在Linux上運行)。
首先兩類:
HandleInformation testClass;
將被testet
XFDHandler test;
的接口與運行時執行類,該類稱爲XFDHandlerProd
所以首先我嘲笑運行級:
test = Mockito.mock(XFDHandlerProd.class);
這四種方法都是void - 方法,所以當我理解official doc時方法本身不應該做任何事情正確:
Beware that void methods on mocks do nothing by default!
於是我會盡我的第一個測試:turnOnBlue();
@Test
public void testNullList() throws IOException, InterruptedException {
ArrayList<Info> nullArray = new ArrayList<Info>();
testClass.handleInformation(nullArray);
Mockito.verify(test, Mockito.times(1)).turnOnBlue();
}
當我發送一個空列表中的TestClass,它應該叫的空隙方法運行級。據我所知,使用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()
行現在我不知道我的」做錯了。
思想
是通信零監守我在HandleInformation
類使用我用的是XFDHandler
的另一個實例,所以可以的Mockito沒有看到任何活動?
如果是這樣,我如何能夠在測試中使用Mockito類而不改變HandleInformation
類中的任何方法?
你是在'testClass'中注入/設置'test'實例嗎?您的想法可能是正確的,因爲您需要將創建的XFDHandler模擬注入到HandleInformation類中。你的HandleInformation類是如何實例化的? – Saket
你可以添加代碼來顯示你如何設置'testClass'對象嗎? – Jonathan
恩,這不是一個空數組,這是一個_empty_數組,這是有區別的。雖然不是你的問題(或者至少,我懷疑它)。 –