我有以下接口:Mockito - 如何使用列表匹配器限制列表類型?
public interface ListHandler {
public boolean add(List<?> list, Object element);
}
對於那些想在一個測試,以確保它僅接收具有特定的類型,例如,String
的列表。我已經編碼了以下測試:
@Test
public void testAddOnlyString() {
boolean actual = false;
when(this.listHandlerMock.add(
Matchers.anyListOf(String.class),
Matchers.anyString()
)).thenReturn(true);
actual = this.listHandlerMock.add(new ArrayList<Integer>(), 1);
assertTrue(actual);
verify(this.listHandlerMock).add(
Matchers.anyListOf(String.class),
Matchers.anyString()
);
}
但測試通過正確。
由於泛型類型的擦除,所以您不知道運行時的泛型類型。我猜'anyListOf'匹配器會檢查列表中的所有元素是否屬於這種類型,但是由於列表是空的,因此它永遠不會失敗。無論如何,你知道你傳遞了什麼名單 - 你爲什麼在任何名單上聲稱?只需提取到'list = new ArrayList',並期望相同的對象:'sameInstance(list)' –
順便說一下,你的實際對象在哪裏?所有的測試正在與模擬進行交互。你在這裏測試什麼? –