没有第二个参数转换,assertEquals不起作用

时间:2010-10-29 14:11:01

标签: java junit

伙计们,为什么我得到“方法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);可以解决问题。

2 个答案:

答案 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-bc可以自动强制转换为long,因此编译器会看到歧义。

您的显式转换告诉编译器您需要Object版本。

请注意,在这种情况下,您可以使用int而不是Integer变量来修复歧义。