web-dev-qa-db-ja.com

曖昧なメソッド呼び出しAssertのassertEquals(Object、Object)とAssert matchのassertEquals(double、double)の両方:

次のエラーが表示されます。

Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match

Junitテストのこのコード行では、getScore()がdoubleを返すことに注意してください。

assertEquals(2.5, person.getScore());

これは私のアサートインポートです。

import static org.junit.Assert.*;

これは何が原因で、どのように修正できますか?

21
java123999

GetScore()はdoubleではなくDoubleを返すと思います。したがって、コンパイラは混乱しています。両方の引数をオブジェクトに変換する必要がありますか、それともDoubleのみをdoubleに変換する必要がありますか?

    double a = 2.0;
    Double b = 2.0;
    // assertEquals(a,b); // fails to compile
    // the compiler is confused whether to use
    assertEquals((Object) a,(Object) b); // OK
    // or
    assertEquals(a,(double) b); // OK

とにかく、プリミティブ型doubleを返すようにメソッドを設定します。

28
Bechyňák Petr

Assert.assertEquals(double, double)(プリミティブバージョン)の使用に特に興味がある場合は、次のように、偏差を許可し、許容偏差をゼロに設定するオーバーライドメソッドを呼び出してみてください。

_assertEquals(2.5, person.getScore(), 0.0);
_

person.getScore()が_2.5_とわずかに異なることが許可されている場合、3番目のパラメーターをゼロ以外にすることもできます。たとえば、_2.500001_が受け入れられる場合、テストは次のようになります。

_assertEquals(2.5, person.getScore(), 0.000001);
_
3
M. Prokhorov

キャストを避け、プリミティブバージョンを使用する場合は、ラッパーオブジェクトからプリミティブの結果を取得できます。例えば:

    double a = 2.0;
    Double b = 2.0;
    assertEquals(a, b.doubleValue()); //Deprecated so use the one with delta

    Integer c = 2;
    int d = 2;
    assertEquals(c.intValue(), d);

    Long e = 2L;
    long f = 2L;
    assertEquals(e.longValue(), f);
1
Molten Ice