我正在尝试在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>.**
如您所见,值相同但测试失败。你知道为什么吗?
答案 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