Java JUnit:方法X对于Ytypes是不明确的

我有一些testing工作正常。 然后,我把它移动到一个不同的包,现在正在出错。 这里是代码:

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(Object,Object)对于JGraphtUtilitiesTesttypes是不明确的

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

方法assertEquals(Object,Object)对于types是不明确的…

这个错误的意思是,你将一个doubledouble传递给一个有两个不同签名的方法:由于自动装箱, assertEquals(Object, Object)assertEquals(double, double)都可以被调用。

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

所以,就你而言,你应该使用:

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

要么:

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

你可以使用这个方法

 assertEquals(double expected, double actual, double delta) 

这将考虑到四舍五入的浮点错误(例如见这篇文章 )。 你可以写

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

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

  • 按照它们应该的比较浮点值
  • 不需要强制转换,因为三个参数断言只适用于双打而不适用于通用对象