【问题标题】:Why does this Microsoft Unit Test Fail?为什么此 Microsoft 单元测试失败?
【发布时间】:2011-02-22 00:17:58
【问题描述】:

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

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

        Assert.AreEqual(expected, actual);

【问题讨论】:

标签: c# asp.net unit-testing


【解决方案1】:

正如马特所说,比较两个浮点数是否相等不是一个好主意,请使用带有小 epsilon 的 Math.Abs(expected-actual)<epsilon

【讨论】:

    【解决方案2】:

    浮点数的设计本身就是不准确的。测试到这么高的准确性可能是行不通的。 actual 的值是多少?由于四舍五入和计算机上浮点的一般性质,您可能会发现它与预期的略有不同。

    【讨论】:

      【解决方案3】:

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

      CPPUNIT_ASSERT_DOUBLES_EQUAL(预期,实际)

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

      【讨论】:

        猜你喜欢
        • 2015-01-27
        • 1970-01-01
        • 1970-01-01
        • 2022-06-29
        • 2021-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多