我正在关注java中的Generic方法的教程,并希望为涉及泛型类型的方法编写单元测试。但它给了我错误对assertEquals的模糊方法调用
我试图搜索此错误但到目前为止没有运气。我发布了我的java和测试类
GenericMethods.java
public class GenericMethods {
public <E> void printArray(E[] inputArray){
//Display Array Elements
List<E> values = Arrays.asList(inputArray);
values.stream()
.forEach(System.out::print);
}
public <T extends Comparable<T>> T returnMax(T x, T y, T z){
T max = x; //Initially assume the firs element is max
if(y.compareTo(max) > 0){
max = y;
}
if(z.compareTo(max) > 0){
max = z;
}
return max;
}
}
GenericMethodsTest.java
public class GenericMethodsTest {
GenericMethods genericMethods;
@Before
public void setUp() throws Exception {
genericMethods = new GenericMethods();
}
@Test
public <T> void shouldReturnCorrectMaximum() throws Exception {
assertEquals(5,genericMethods.returnMax(3,4,5));
}
}
答案 0 :(得分:4)
这是因为assertEquals同时采用(Object,Object)和(long,long)。尝试将其更改为
assertEquals(new Integer(5), genericMethods.returnMax(3,4,5));
答案 1 :(得分:4)
原因是
T returnMax(...) {..}
可以针对此案例返回Object
或long
。
此Assert class实现已为long, long和Object, Object参数重载此方法。因此使用
assertEquals(5,genericMethods.returnMax(3,4,5));
会警告你两种重载方法之间存在歧义。
根据@ lane.maxwell的建议,使用new Integer(5)
代替确保
static public void assertEquals(Object expected, Object actual)
从Assert
类执行。