4
我試圖驗證在錯誤情況下我的代碼記錄了正確的消息,所以我嘲笑了org.apache.commons.logging.Log
,並試圖驗證它是否正確調用。如何使Mockito參數匹配方法簽名
我期待驗證的方法的簽名是:error(Object, Throwable)
我期望有一個傳入的字符串,其中包含文本「消息對於隊列太大」。在這種情況下,throwable將爲null。
這裏是我的代碼來驗證這一點:
Mockito.verify(errorLog, Mockito.atLeastOnce()).error(
Mockito.matches("*Message is too big for queue*"),
Mockito.isNull(Throwable.class));
在運行此,我雖然得到一個錯誤:
Argument(s) are different! Wanted:
log.error(
matches("*Message is too big for queue*"),
isNull()
);
-> at com.company.TestClass.testMessageTooBig(TestClass.java:178)
Actual invocation has different arguments:
log.error(
|ClassUnderTest|Message is too big for queue (size=41). It will never fit, so discarding.,
null
);
看來,這裏的問題是,這Mockito.matches()
使得它看起來對當實際簽名是(Object,Throwable)時帶有簽名(String,Throwable)的方法。
如何讓這些匹配?我知道字符串是問題,因爲如果我用Mockito.any()
替換Mockito.matches()
它會通過。
如果您刪除,會發生什麼的開頭和結尾從你的論點到Mockito.matches的星號?我在想這可能會使正則表達式匹配。 – unigeek
[ArgumentCaptor](http://site.mockito.org/mockito/docs/current/org/mockito/ArgumentCaptor.html)可能是您的案例中的一個選項 – Mindaugas
我嘗試了ArgumentCaptor並且沒有幫助: 'Argument (s)是不同的!求購: log.error( [email protected], 空 );' – Steve