105

我有一些测试工作正常。然后,我将它移到另一个包中,现在出现错误。这是代码:

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 类型不明确

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

4

3 回答 3

218

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

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

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

因此,在您的情况下,您应该使用:

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

或者:

assertEquals(70.0d, eccen.get("alpha").doubleValue());
于 2009-11-28T00:46:15.860 回答
3

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

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

消除了歧义。

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

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

也可以解决歧义。

但是,assertEquals(double, double) 到目前为止已被弃用,并且有充分的理由,所以我鼓励您使用其他人已经建议的带有 delta 的方法。

By good reasons I mean that, given the inner representation of double numbers, two apparently equal double numbers can differ in an irrelevant infinitesimal fraction and wouldn't pass a test, but that doesn't mean that there's anything wrong with your code.

于 2018-03-17T21:53:51.210 回答
2

您可以使用该方法

assertEquals(double expected, double actual, double delta)

这将考虑到浮点数的舍入误差(例如,参见这篇文章)。你可以写

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

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

  • 比较浮点值,因为它们应该是
  • 无需强制转换,因为三个参数 assert 仅适用于双精度对象,不适用于通用对象
于 2017-04-25T09:08:06.243 回答