這讓我很困惑,讓我用基本的例子來解釋;public void search(String name) { // some more Response response = component.findByName(name); // some more action with response }所以當我為它編寫測試時;@Testpublic void search_givenName_shouldOk() { Example example = new Example(); Component component= Mockito.mock(Component.class); String name = "test"; when(component.findByName(eq(name))).thenReturn(mock(Response.class)); example.search(name); verify(component, times(1)).findByName(eq(name));}所以實際上當我們用 eq(name) 輸入編寫 when(...) 子句時,它不是已經驗證了我們的測試用例嗎?否則 findByName 將不會返回 Response 并且進一步的調用將無法正常進行。那么當我們再次用verify(..)驗證它的時候,是不是加倍工作了呢?
2 回答

森欄
TA貢獻1810條經驗 獲得超5個贊
when()
如果你想模擬一個函數的行為并因此避免測試它,你可以使用。
用于verify()
檢查函數是否已作為測試函數的一部分被調用。
這是兩個不同的概念。在您的情況下,這when()
沒有意義,因為您要測試該功能。此外,如果經過測試的函數是某個Example
類的一部分,您也不希望模擬該函數。你只會嘲笑你不想測試的東西。

搖曳的薔薇
TA貢獻1793條經驗 獲得超6個贊
when
不驗證任何東西,它只是指示模擬對象在被調用時如何表現。
所以你的斷言
當您在輸入時使用“eq”時,您已經驗證了是否使用該輸入調用了它。
是假的。
所以這條線:
when(component.findByName(eq(name))).thenReturn(mock(Response.class));
意思是“模擬組件,當(如果)findByName
使用這個特定名稱調用你的方法時,你能返回那個好的響應嗎?”
當您模擬了所有所需的行為并調用了實際測試的方法后,您仍然需要verify
模擬對象的行為與您期望的一樣。
添加回答
舉報
0/150
提交
取消