Mockito提供了許多像任何(),anyClass()等匹配器。Mockito匹配器|正確使用
人們可以辯論他們的用法。但是我覺得,當我們不關心輸入對象包含什麼時,只要它是預期的類,就應該使用匹配器。
我只想知道這個用法是否正確?如果沒有,使用它們的更好方法是什麼?
例如:
假設我們有一個測試,希望運行時異常,當一個方法被稱爲一些請求對象。由於我們在調用模擬時顯式拋出運行時異常,因此請求對象的內容是什麼並不重要。所以這個測試似乎合乎邏輯
@Test(expected = RunTimeException.class)
public void testExceptionOccurs() {
when(mock.method(any(RequestObject.class))).thenThrow(new RuntimeException());
mock.method(new RequestObject());
}
這是正確的方法嗎?
總是使用'isA'而不是'any'更好嗎? – Templar
@Templar絕對不是「永遠」:'isA' [拒絕null](https://github.com/mockito/mockito/blob/master/src/main/java/org/mockito/internal/matchers/InstanceOf.java #L22),這可能並非必要或不可取。更重要的是,Mockito語法默認支持靈活性,以減少響應重構和其他更改的測試脆弱性;參數值通常不太可能具有_relevant類型,而是不相關的值(其中'any'將覆蓋完全不相關的參數,而其他匹配器將覆蓋相關值)。 –