实际值和预期值相同但单元测试失败。为什么?

时间:2013-09-04 08:07:34

标签: unit-testing visual-studio-2012 assert

我正在尝试在VS 2012上学习单元测试,并尝试了这个:

 public class Calculator
 {
    public double substraction(double num1, double num2)
    {
        return num1 - num2;
    }
 }

我的测试课在这里:

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void calc_substract()
    {
        var calculator = new Calculator();
        Assert.AreEqual<double>(calculator.substraction(5.3, 1.1), 4.2);
    }
}

给出了这个错误:

Test Name:  calc_substract
Test FullName:  MyUnitTest.UnitTest1.calc_substract
Test Source:    d:\Users\...
Test Outcome:   Failed
Test Duration:  0:00:00,0068363

**Result Message:   Assert.AreEqual failed. Expected:<4,2>. Actual:<4,2>.**

如您所见,值相同但测试失败。你知道为什么吗?

1 个答案:

答案 0 :(得分:1)

非常奇怪,我想知道这是否因为你正在使用双打而失去精确度问题 - 尽管这些值似乎无害,不会触发精度问题。

另外,奇妙的结果信息:)。

如果你要求它比较4.2到4.2,它至少会通过:

Assert.AreEqual<double>(4.2, 4.2);

如果你插入一些四舍五入,也会很好奇看看会发生什么:

Assert.AreEqual<double>(Math.Round(calculator.substraction(5.3, 1.1),1), 4.2);

此外,请考虑使用decimal而不是double,因为它具有更高的精度,更自然地表示精确的小数,因此您应该发现使用{{1}避免使用特定测试等情况的精度问题} - 虽然这并不是说其他​​更复杂的案例,即使使用decimal

,也不会出现精确问题