NUnitテストを実行して、既知のテストデータと計算結果を評価しています。数値は浮動小数点型の倍数であるため、それらは正確に等価であるとは思わないが、与えられた精度でそれらを等しく扱う方法がわからない。ある固定精度ではなく、2つの倍率が一定の精度で等しいかどうかを評価します。
我々は一定の許容範囲と比較することができNUnitのでは:
double expected = 0.389842845321551d;
double actual = 0.38984284532155145d; // really comes from a data import
Expect(actual, EqualTo(expected).Within(0.000000000000001));
、それがゼロ以下の数字のために正常に動作しますが、数字は許容範囲が実際に変更する必要が育つように、我々は常に同じ数を気に精度の数字の
具体的には、このテストは失敗します。
double expected = 1.95346834136148d;
double actual = 1.9534683413614817d; // really comes from a data import
Expect(actual, EqualTo(expected).Within(0.000000000000001));
そしてもちろん、より大きな数字が許容範囲で失敗... 2つの浮動小数点数は、与えられた精度で等しい評価するための正しい方法を何
double expected = 1632.4587642911599d;
double actual = 1632.4587642911633d; // really comes from a data import
Expect(actual, EqualTo(expected).Within(0.000000000000001));
? NUnitでこれを行う組み込みの方法はありますか?
これは非常に良い解決策ですが、 '0.0'を' 0.0'と比較すると例外が発生します。しかし、 '予想された'の周りの単純な 'if'条件がそれを処理します。 –
ああ、そうです。私は何かがあると思った。 :)私はこれを考慮に入れて私の答えを更新しました。 – Brett
これは本当にうまくいった。私は105単位テストを実行しました、正の半分と負の半分、そして全部で8を超えました。 Michael Borgwardtの答えは合格し、全く同じテストに合格しなかった。 –