Java Mockito-如何使用列表匹配器限制列表类型?

Java Mockito-如何使用列表匹配器限制列表类型?,java,unit-testing,junit,mocking,mockito,Java,Unit Testing,Junit,Mocking,Mockito,我有以下界面: public interface ListHandler { public boolean add(List<?> list, Object element); } 但是考试是正确通过的。简短的回答:你不能。列表的类型在编译时被清除(类型擦除) 例如,这将打印true: System.out.println(new ArrayList<Integer>().equals(new ArrayList<String>())); Sy

我有以下界面:

public interface ListHandler {

    public boolean add(List<?> list, Object element);

}

但是考试是正确通过的。

简短的回答:你不能。列表的类型在编译时被清除(类型擦除) 例如,这将打印
true

System.out.println(new ArrayList<Integer>().equals(new ArrayList<String>()));
System.out.println(new ArrayList().equals(new ArrayList());
另请参阅
匹配器的文档。anyListOf

此方法不进行任何类型检查,只是为了避免 输入你的密码


如果列表不是空的,您可以构建一个匹配器来检查每个条目是否具有您期望的类型,但是对于空列表,您无能为力

简短的回答:你不能。列表的类型在编译时被清除(类型擦除) 例如,这将打印
true

System.out.println(new ArrayList<Integer>().equals(new ArrayList<String>()));
System.out.println(new ArrayList().equals(new ArrayList());
另请参阅
匹配器的文档。anyListOf

此方法不进行任何类型检查,只是为了避免 输入你的密码


如果列表不是空的,您可以构建一个匹配器来检查每个条目是否具有您期望的类型,但是对于空列表,您无能为力

由于泛型类型擦除,所以您在运行时不知道泛型类型。我猜
anyListOf
matcher所做的是检查列表中的所有元素都是这种类型的,但是由于列表是空的,所以它永远不会失败。无论如何,你知道你传递的是什么列表——为什么你要在任何列表上断言?只需提取到
list=newarraylist
并期望得到相同的对象:
sameInstance(list)
顺便问一下,您的实际对象在哪里?所有的测试都是与模拟进行交互。你在这里测试什么?由于泛型类型擦除,所以在运行时你不知道泛型类型。我猜
anyListOf
matcher所做的是检查列表中的所有元素都是这种类型的,但是由于列表是空的,所以它永远不会失败。无论如何,你知道你传递的是什么列表——为什么你要在任何列表上断言?只需提取到
list=newarraylist
并期望得到相同的对象:
sameInstance(list)
顺便问一下,您的实际对象在哪里?所有的测试都是与模拟进行交互。你在这里测试什么?那么,这些匹配器的目标是什么?@Julen是{@link matchers#anyList()}的通用友好别名。它是SuppressWarnings(“未选中”)的一种替代方法,用于保持代码中没有编译器警告。警告是如何生成的?我试图复制它来理解匹配者的感觉。@Julen这是另一个问题;它在编译时“生成”;只是一个编译器警告,这些匹配器的目标是什么?@Julen是{@link matchers#anyList()}的通用友好别名。它是SuppressWarnings(“未选中”)的一种替代方法,用于保持代码中没有编译器警告。警告是如何生成的?我试图复制它来理解匹配者的感觉。@Julen这是另一个问题;它在编译时“生成”;只是一个编译器警告