私が働いている会社でVS2010を使ったテストでデモプロジェクトを行いました。 テスト用の入力として、数学計算クラス:MathOps。 MathOpsはいくつかの例外とそれ以外のものを投げることができます。 しかし、私が単体テストをセットアップしていたとき、私は非常に奇妙に振る舞うように見える単体テストを見つけました。VS2010結果が正しいうちにユニットテストに失敗する
MathOpsオブジェクトはターゲットと呼ばれ、テスト初期化メソッドで初期化され、使用される可能性があることを示します。
Private target As MathOps = Nothing
<TestInitialize()> _
Public Sub MyTestInitialize()
target = New MathOps()
End Sub
誤動作されている試験は、以下のいずれか:
'''<summary>
'''A test for MathOps.add
'''</summary>
<TestMethod()> _
Public Sub addTest()
Dim first As Double = 2.3
Dim second As Double = 3.4
Dim expected As Double = 5.7
Dim actual As Double
actual = target.add(first, second)
Assert.AreEqual(expected, actual)
End Sub
I予想/結果値である5.7をもたらす付加用語を使用する場合、アサーションは、コードが生成さにもかかわらず、失敗正しい結果。
Assert.AreEqual failed。期待される:< 5,7>。実際:< 5,7>
3.4の代わりに3.4000001を追加して5.7000001にすると、テストに合格します。
誰もがこのエラーの原因を知っていますか?
ここでは丸め問題が当てはまると思われますので、VSが別の値を表示していなくても答えが正しいと思います。それはまだ私を悩ませるが、私はそれと一緒に生きなければならないと思う。 – Onno
示されているものと正確な値が同じである必要はありません。表示コードは、小さな違いを丸めます。しかし、Doublesを直接比較すると、すべてのビットが比較されます。 –