2011-07-20 58 views
1

我已經做了一個演示項目與VS2010在我工作的公司進行測試。 作爲測試的輸入一個小數學計算類:MathOps。 MathOps可以拋出一些例外情況。然而,當我設置單元測試時,我來到了一個單元測試,這似乎表現得很奇怪。VS2010單元測試失敗,而結果是正確的

MathOps對象被稱爲target,並在測試初始化​​方法中進行初始化以演示它可能用於什麼。

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 

當我使用,其導致5.7另外方面是所述預期/結果值,則斷言失敗,即使代碼產生正確的結果。

Assert.AreEqual失敗。預計:< 5,7>。實際:< 5,7>。

如果我通過添加3.4000001而不是3.4來測試5.7000001,測試通過。

有誰知道這個錯誤的原因?

回答

2

永遠不要期望浮點運算的精確結果; floating-point arithmetic is inherently susceptible to rounding problems like this one。改爲使用錯誤閾值檢查結果。

+0

舍入問題似乎適用於這裏,所以我想答案是正確的,即使VS沒有顯示不同的值。它仍然讓我惱火,但我想我必須忍受它。 – Onno

+0

顯示的是什麼,確切的值不一定是相同的。顯示代碼消除了最小差異。但是雙打的直接比較比較每一點。 –