我在我工作的公司做了一个关于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,则测试通过。
有谁知道这个错误的原因?
答案 0 :(得分:2)
不要指望浮点运算的精确结果; floating-point arithmetic is inherently susceptible to rounding problems like this one。请改为使用错误阈值检查结果。