2009-11-28 68 views
71

我有一些测试正常工作。然后,我将它移到不同的软件包中,现在出现错误。下面是代码:Java JUnit:方法X对于类型Y不明确

import static org.junit.Assert.*; 
import java.util.HashSet; 
import java.util.Map; 
import java.util.Set; 

import org.jgrapht.Graphs; 
import org.jgrapht.WeightedGraph; 
import org.jgrapht.graph.DefaultWeightedEdge; 
import org.jgrapht.graph.SimpleWeightedGraph; 
import org.junit.*; 

@Test 
    public void testEccentricity() { 
     WeightedGraph<String, DefaultWeightedEdge> g = generateSimpleCaseGraph(); 
     Map<String, Double> eccen = JGraphtUtilities.eccentricities(g); 

     assertEquals(70, eccen.get("alpha")); 
     assertEquals(80, eccen.get("l")); 
     assertEquals(130, eccen.get("l-0")); 
     assertEquals(100, eccen.get("l-1")); 
     assertEquals(90, eccen.get("r")); 
     assertEquals(120, eccen.get("r-0")); 
     assertEquals(130, eccen.get("r-1")); 
    } 

的错误信息是这样的:

方法的assertEquals(对象,对象)的暧昧JGraphtUtilitiesTest

我怎样才能解决这个问题的类型?为什么当我将课程移至不同的包时会出现此问题?

+0

告诉我们如何你的班级被宣布。在我看来,如果你从JUnit3继承,然后试图从JUnit4静态导入。 – bmargulies 2009-11-28 00:32:32

+0

是的,实际上,我在包A中使用了JUnit3,并在包B中使用了JUnit4,我最初编写了这些测试。然后我从套餐B切换到套餐A,出现问题。但是我没有看到任何可以指示JUnit 3的类。 – 2009-11-28 00:38:52

+0

@Rosarch这些JGraphtUtilities在任何地方都可用吗?我看不出在JGraphT中产生怪异的方法! – Nick 2012-12-13 12:17:06

回答

171

方法的assertEquals(对象,对象)不明确的类型......

这个错误是什么意思是,你传递一个double和和Double到具有两个不同签名的方法:assertEquals(Object, Object)assertEquals(double, double)这两个都可以被称为,感谢autoboxing。

为避免含糊不清,请确保您拨打assertEquals(Object, Object)(通过两个双打)或assertEquals(double, double)(通过两个双打)。

所以,你的情况,你应该使用:

assertEquals(Double.valueOf(70), eccen.get("alpha")); 

或者:

assertEquals(70.0d, eccen.get("alpha").doubleValue()); 
+0

好的,或者我可以将它切换为使用JUnit 4而不是JUnit 3.我该怎么做? – 2009-11-28 01:38:44

+7

解决方案并非真正从一个版本切换到另一个版本。相反,如我所建议的那样,帮助编译器并消除模糊性。 – 2009-11-28 02:55:07

+1

无论如何,它不应该是assertEquals(70.0d,eccen.get(“alpha”)); ? – mhaller 2009-11-28 03:06:32

0

您可以使用该方法

assertEquals(double expected, double actual, double delta) 

哪会考虑舍入误差是浮点数(例如参见this post)。你可以写

assertEquals(70, eccen.get("alpha"), 0.0001); 

这意味着只要两个值相差小于0.0001,它们就被认为是等于。这有两个好处:

  • 比较浮点值,因为他们都应该
  • 无需投,因为这三个参数断言只applyes双打,而不是通用对象