次のエラーが表示されます。
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.*;
これは何が原因で、どのように修正できますか?
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を返すようにメソッドを設定します。
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);
_
キャストを避け、プリミティブバージョンを使用する場合は、ラッパーオブジェクトからプリミティブの結果を取得できます。例えば:
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);