我有一个单元测试,我从距离计算中存储在实际变量中的数字是6.07328028312884,但它仍然说测试失败了。为什么呢?
double expected = 6.07328028312884;
double actual;
actual = target.Distance((double)latitude, (double)longitude);
actual = actual / 1000;
Assert.AreEqual(expected, actual);
答案 0 :(得分:5)
浮点数因其设计不准确。要测试那么多准确性可能不会起作用。 actual
的价值是多少?由于四舍五入和计算机浮点的一般性质,你可能会发现它只是预期的一点点。
答案 1 :(得分:5)
正如Matt所说,比较两个浮点数是不是一个好主意,使用Math.Abs(expected-actual)<epsilon
和一个小epsilon。
答案 2 :(得分:0)
我不确定Microsoft UT,但在CPPUNIT中有一个特殊的宏
CPPUNIT_ASSERT_DOUBLES_EQUAL(预期,实际)
可能检查预期和实际差异的绝对值是否小于某个epsilon。在Microsoft UTs中必须有类似的功能