Mockito 經過使用 equals()
這種天然的 Java 樣式來校驗參數值。有時候,當須要有其餘一些靈活性的時候,你可能會要求使用參數匹配(argument matchers)。html
請參考下面的代碼:java
|
參數匹配運行進行靈活校驗或者打標。
請訪問 https://static.javadoc.io/org.mockito/mockito-core/3.0.0/org/mockito/hamcrest/MockitoHamcrest.html 連接來查看更多有關自定義參數匹配器/hamcrest matchers(custom argument matchers/hamcrest matchers)的內建參數匹配器和示例。
更多有關 自定義參數匹配器(custom argument matchers)的使用,請參考 ArgumentMatcher
類的 API 文檔。
在使用複雜參數匹配器的時候須要謹慎。嘗試給一個乾淨而且簡單的測試的時候,儘可能選擇天然的參數匹配使用的是 equals()
對比相對偶然使用 anyX()
來講。有時候可能對你的代碼進行一些重構來容許 equals()
進行匹配,或者能夠實現(implement)equals()
方法來幫助進行測試。
同時,請閱讀 Capturing arguments for further assertions (Since 1.8.0) 頁面中的內容,或者參考 ArgumentCaptor
類的 API。
ArgumentCaptor
是有關參數匹配器的是特殊實現,可以爲後面的對比(assertions)捕獲參數變量。
若是你如今正在使用參數匹配器,全部參數(all arguments)都必須由 matches 提供。
下面的示例代碼顯示校驗,可是一些將會應用到打標中。
|
像 anyObject()
, eq()
Matcher 方法不會返回 matchers。
在內部,他們將會在堆棧(stack)中記錄一個 matcher 而後返回一個虛假的值(一般爲 null)。
這種實現方式是基於 Java 編譯器中有關靜態類型的安全性問題而考慮的,從而帶來的結果是你不能在 verified/stubbed 方法外部使用 anyObject()
, eq()
。