测试通用Java方法时出错

时间:2017-01-15 04:19:07

标签: java generics junit

我正在关注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));

}
}

2 个答案:

答案 0 :(得分:4)

这是因为assertEquals同时采用(Object,Object)和(long,long)。尝试将其更改为

assertEquals(new Integer(5), genericMethods.returnMax(3,4,5));

答案 1 :(得分:4)

原因是

T returnMax(...) {..}

可以针对此案例返回Objectlong

Assert class实现已为long, longObject, Object参数重载此方法。因此使用

assertEquals(5,genericMethods.returnMax(3,4,5));

会警告你两种重载方法之间存在歧义。

根据@ lane.maxwell的建议,使用new Integer(5)代替确保

static public void assertEquals(Object expected, Object actual)

Assert类执行。