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

我怎样才能解决这个问题?当我将课程移至其他包时,为什么会出现此问题?

原文由 Nick Heiner 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 546
2 个回答

方法 assertEquals(Object, Object) 对于类型不明确…

What this error means is that you’re passing a double and and Double into a method that has two different signatures: assertEquals(Object, Object) and assertEquals(double, double) 由于自动装箱,两者都可以调用。

为避免歧义,请确保您调用 assertEquals(Object, Object) (通过两个双打)或 assertEquals(double, double) (通过两个双打)。

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

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

或者:

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

原文由 Pascal Thivent 发布,翻译遵循 CC BY-SA 3.0 许可协议

这个问题最简单的解决方案就是将第二个参数转换为原语:

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

歧义消除。

这对任何 Number 子类都有效,例如:

 assertEquals(70, (int)new Integer(70));

也会解决歧义。

但是,出于充分的理由,assertEquals(double, double) 目前已被弃用,因此我鼓励您像其他人已经建议的那样使用带有 delta 的方法。

出于充分的理由,我的意思是,鉴于双精度数的内部表示,两个明显相等的双精度数可以在无关紧要的无穷小分数上有所不同,并且不会通过测试,但这并不意味着您的代码有任何问题。

原文由 Fran Marzoa 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题