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是不明确的…
这个错误的意思是,你将一个double
和double
传递给一个有两个不同签名的方法:由于自动装箱, 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,就认为是相等的。 这有两个好处:
- 按照它们应该的比较浮点值
- 不需要强制转换,因为三个参数断言只适用于双打而不适用于通用对象