为什么这个Microsoft单元测试失败?

时间:2011-02-21 16:09:10

标签: c# asp.net unit-testing

我有一个单元测试,我从距离计算中存储在实际变量中的数字是6.07328028312884,但它仍然说测试失败了。为什么呢?

        double expected = 6.07328028312884; 
        double actual;
        actual = target.Distance((double)latitude, (double)longitude);
        actual = actual / 1000;

        Assert.AreEqual(expected, actual);

3 个答案:

答案 0 :(得分:5)

浮点数因其设计不准确。要测试那么多准确性可能不会起作用。 actual的价值是多少?由于四舍五入和计算机浮点的一般性质,你可能会发现它只是预期的一点点。

答案 1 :(得分:5)

正如Matt所说,比较两个浮点数是不是一个好主意,使用Math.Abs(expected-actual)<epsilon和一个小epsilon。

答案 2 :(得分:0)

我不确定Microsoft UT,但在CPPUNIT中有一个特殊的宏

CPPUNIT_ASSERT_DOUBLES_EQUAL(预期,实际)

可能检查预期和实际差异的绝对值是否小于某个epsilon。在Microsoft UTs中必须有类似的功能