伙计们,为什么我得到“方法assertEquals(String,Object,Object)对于这个JUnit测试的类型DictionaryTest”错误是不明确的?
@Test
public void testEditCard() {
Integer a = 10;
Integer b = 12;
Integer c = 2;
assertEquals("test", a-b, c);
}
添加施放assertEquals("test", (Integer)(a-b), c);
可以解决问题。
答案 0 :(得分:14)
由于autoboxing和-unboxing的奇迹:
assertEquals("test", /* this is an int */ a-b, /* this is an Integer */ c);
可以评估为
assertEquals(String, long, long);
// in this case the second parameter is unboxed
// (and the first one silently casted)
或
assertEquals(String, Object, Object);
// in this case the first parameter is boxed
如果将所有变量声明为int(不是Integer),则不应存在歧义。
答案 1 :(得分:5)
这是因为编译器无法判断您是否要调用assertEquals(String, Object, Object)
或assertEquals(String, long, long)
。由于a-b
和c
可以自动强制转换为long
,因此编译器会看到歧义。
您的显式转换告诉编译器您需要Object版本。
请注意,在这种情况下,您可以使用int
而不是Integer
变量来修复歧义。