1

我正在尝试在 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>.**

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

4

1 回答 1

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因为它具有更高的精度并且更自然地表示精确的小数,因此您应该发现避免特定测试等案例的精度问题decimal- 尽管这并不是说其他​​更复杂的案例不会仍然受到影响即使有精度问题decimal

于 2013-09-04T08:21:10.230 回答