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"));
    }

エラーメッセージは次のとおりです。

JGraphtUtilitiesTest 型のメソッド assertEquals(Object, Object) があいまいです

どうすればこれを修正できますか? クラスを別のパッケージに移動したときにこの問題が発生したのはなぜですか?

4

3 に答える 3

218

メソッド assertEquals(Object, Object) は型に対してあいまいです ...

このエラーが意味するのは、 2 つの異なるシグネチャを持つメソッドにdoubleandを渡しているということです。オートボクシングのおかげで、どちらも呼び出すことができます。DoubleassertEquals(Object, Object)assertEquals(double, double)

あいまいさを避けるために、assertEquals(Object, Object)(2 つの Double を渡すことによって) またはassertEquals(double, double)(2 つの Double を渡すことによって) 呼び出すようにしてください。

したがって、あなたの場合、次を使用する必要があります。

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

または:

assertEquals(70.0d, eccen.get("alpha").doubleValue());
于 2009-11-28T00:46:15.860 に答える
2

メソッドを使用できます

assertEquals(double expected, double actual, double delta)

これは、浮動小数点に固有の丸め誤差を考慮に入れます (たとえば、この投稿を参照してください)。あなたは書ける

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

これは、2 つの値の差が 0.0001 未満である限り、等しいと見なされることを意味します。これには 2 つの利点があります。

  • 想定どおりに浮動小数点値を比較します
  • 3 つの引数 assert は double にのみ適用され、ジェネリック オブジェクトには適用されないため、キャストする必要はありません。
于 2017-04-25T09:08:06.243 に答える