亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 When vs Verify 驗證方法調用

使用 When vs Verify 驗證方法調用

交互式愛情 2023-04-13 14:49:51
這讓我很困惑,讓我用基本的例子來解釋;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類的一部分,您也不希望模擬該函數。你只會嘲笑你不想測試的東西。


查看完整回答
反對 回復 2023-04-13
?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

when不驗證任何東西,它只是指示模擬對象被調用時如何表現。

所以你的斷言

當您在輸入時使用“eq”時,您已經驗證了是否使用該輸入調用了它。

是假的。

所以這條線:

when(component.findByName(eq(name))).thenReturn(mock(Response.class));

意思是“模擬組件,當(如果)findByName使用這個特定名稱調用你的方法時,你能返回那個好的響應嗎?”

當您模擬了所有所需的行為并調用了實際測試的方法后,您仍然需要verify模擬對象的行為與您期望的一樣。


查看完整回答
反對 回復 2023-04-13
  • 2 回答
  • 0 關注
  • 202 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號