VS2010单元测试失败,结果正确

时间:2011-07-20 10:04:18

标签: visual-studio-2010 unit-testing floating-point

我在我工作的公司做了一个关于VS2010测试的演示项目。 作为测试的输入,一个小的数学计算类:MathOps。 MathOps可以抛出一些异常和诸如此类的东西。 然而,当我设置单元测试时,我进行了单元测试,这似乎表现得非常奇怪。

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-取代。实际:&LT; 5,7&GT;

如果我通过添加3.4000001而不是3.4来使其成为5.7000001,则测试通过。

有谁知道这个错误的原因?

1 个答案:

答案 0 :(得分:2)

不要指望浮点运算的精确结果; floating-point arithmetic is inherently susceptible to rounding problems like this one。请改为使用错误阈值检查结果。