测试 - 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类型是不明确的

我怎样才能解决这个问题? 当我将类移到另一个包时,为什么会出现此问题?

3个解决方案
185 votes

assertEquals(Object,Object)方法对于类型是不明确的......

此错误的含义是您将assertEquals(double, double)Double传递给具有两个不同签名的方法:assertEquals(double, double)assertEquals(double, double),由于自动装箱,这两个签名都可以被调用。

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

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

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

要么:

assertEquals(70.0d, eccen.get("alpha").doubleValue());
Pascal Thivent answered 2019-09-11T03:00:53Z
1 votes

您可以使用该方法

assertEquals(double expected, double actual, double delta)

其中将考虑浮点数的舍入误差(例如,参见本文)。 你可以写

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

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

  • 按预期比较浮点值
  • 不需要强制转换,因为三个参数断言仅适用于双精度,而不适用于通用对象
Paolo answered 2019-09-11T03:01:42Z
0 votes

解决此问题的最简单方法是将第二个参数转换为基元:

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

消除歧义。

这适用于任何Number子类,例如:

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

也会解决模棱两可的问题。

但是,assertEquals(double,double)现在已被弃用,并且有充分的理由,因此我鼓励您使用带有delta的方法,正如其他人已经建议的那样。

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

Fran Marzoa answered 2019-09-11T03:02:40Z
translate from https://stackoverflow.com:/questions/1811103/java-junit-the-method-x-is-ambiguous-for-type-y