Mockito怎麼驗證最後一次呼叫

2021-08-20 06:28:55 字數 918 閱讀 3557

比如說你有一段**像這樣:

你想驗證a的add方法最後一次呼叫的時候引數是2,怎麼做呢?

方法1 可以利用argumentcaptor去獲得所有的實參,然後判斷最後乙個即可。

argumentcaptorargument = argumentcaptor.forclass(string.class);

mockito.verify(service, mockito.atleastonce()).add(argument.capture());

listvalues = argument.getallvalues();

asserttrue(values.contains("exception.message"));

如果沒有atleastonce(),如果你的add方法被呼叫了多餘一次的話,會報錯:org.mockito.exceptions.verification.toomanyactualinvocations

方法2 如果你的service是乙個很簡單的pojo的話,也可以不mock它,直接用真實的,最後驗證資料是不是你想要的就好了。但如果你的service還依賴於其他更多的物件,其它的物件又依賴於其它物件,這種方式有可能不是很容易的用真實資料,而且也導致你寫的不是unit test,更像是integration test了。不過如果很容易生成,也可以試一試,畢竟測的更多也不是壞事。

方法3 直接用argumentcaptor的getvalue(),這個會拿到最後一次的值,根據題意的需求,這個是目前最好的寫法。但是方法一可以擴充套件到其它型別的測試,比如倒數第二個之類的。

更詳細的討論:

原文:hongchangfirst

hongchangfirst的主頁:

最後一次救贖

連這個也廢掉了嗎?66歲的王安石枯槁的身軀在料峭的春寒中顫慄著,昏花的雙眼無力地凝視著西北方向 那裡有承載他嘔心瀝血的未竟事業的帝都,是他生命中最為燦爛輝煌也最為寥落失意的地方。稟性剛毅的倔強老人無法想象,自己窮盡一生的政治智慧型所醞釀的帝國變革方略竟以這樣一種方式謝幕,他深切熱愛的國家和人民繼續在...

最後一次總結

一 函式scanf 和gets 都可用來輸入字串,而printf 和puts 都輸出字串。在scanf 中使用 s,輸入引數必須是字元型陣列名。該函式遇回車或空格輸入結束,並自動將輸入的資料和字串結束符 0 送入陣列中。gets中遇回車輸入結束,自動將輸入的一串字元和 n 送入陣列中 二struct...

最後一次作業

1 當初你是如何做出選擇計算機專業的決定的?經過乙個學期,你的看法改變了麼,為什麼?你覺得計算機是你喜歡的領域嗎,它是你擅長的領域嗎?為什麼?從小就喜歡玩電腦,對電腦很感興趣,所以上了高中以後自己就決定上大學要學習計算機系的專業,覺得會很有趣,而且我也得償所願,終於上去了計算機專業。經過了一學期,其...