4

doubleのassertEqualsは非推奨になりました。Epsilonのフォームを使用する必要があることがわかりました。これは、ダブルスの100%の厳密さが不可能なためです。とにかく、2つのダブル(期待される結果と実際の結果)を比較する必要がありますが、その方法がわかりません。

現時点では、私のテストは次のようになっています。

@Test
public void testCalcPossibleDistancePercentageCount() {
    int percentage = 100;
    assertEquals("Wrong max possible value for %" + percentage, 110.42, processor.calcPossibleValue(percentage));
    percentage = 75;
    /*corresponding assertions*/
}

これが私が受け取り、JUnitで確認したい3つのdouble値です:110.42、2760.5、10931.58。JUnitテストはそれらのアサーションでどのように見えるべきですか?メソッドでの計算の結果としてそれらを受け取ります:

processor.calcPossibleValue(allowed_percentage){return /*Some weird formulae here*/;}
4

4 に答える 4

11

呼び出しに4番目のパラメーターを追加する必要がありますassertEquals。2つのdoubleが「等しい」と見なされるしきい値です。通話は次のようになります。

assertEquals("Wrong max possible value for %" + percentage, 110.42,
        processor.calcPossibleValue(percentage), 0.01);

上記の呼び出しは、によって返される値processor.calcPossibleValue(percentage)がの±0.01以内である110.42場合、2つの値は等しいと見なされることを示します。この値を変更して、アプリケーションに必要なだけ小さくすることができます。

詳細については、JUnitのドキュメントを参照してください。

于 2012-08-04T12:57:53.107 に答える
1

Java doubleは、IEEE75464ビット形式を使用します。このフォーマットには52の仮数ビットがあります。2つの値を比較する場合、イプシロンは期待値の大きさを考慮に入れる必要があります。

たとえば、0.01は110.42で問題なく機能する可能性がありますが、期待値が>252の場合は機能しませ。2 52の大きさは非常に大きいため、精度のために0.01が失われます(つまり、52ビットの仮数ビットのみ)。たとえば、2 52 + 0.01 == 252

そのことを念頭に置いて、イプシロンは期待値にスケーリングする必要があります。たとえば、期待値÷ 252-3または110.42÷252-3 = 1.96 ... x10-13。仮数の最下位3ビットに許容値が与えられるため、252-3を選択しました。

1つの注意点は、期待値が0.0の場合、この式はイプシロンを0.0として計算することです。これは、特定の場合には厳しすぎる可能性があります。

もう1つの注意点は、NaNと±∞が処理されないことです。

于 2013-08-01T18:16:25.397 に答える
1
Assert.assertTrue("Not equals", expectedDouble -  actualDouble == 0);

イプシロンやデルタを使用する必要はありません。

于 2017-01-16T20:02:51.903 に答える
1

アサートは非推奨です

assertTrue("message like not equal ",expectedresult-actual == 0);
于 2019-04-26T16:20:05.690 に答える