我有以下课程
public static class MyClass
{
public static double Converter(int mpg)
{
return Math.Round((double)mpg / ((double)36 / 12.74), 2);
}
}
和NUnit单元测试
[TestFixture]
public class ConverterTests
{
[Test]
public void Basic_Tests()
Assert.AreEqual(8.50, MyClass.Converter(24));
}
}
我的单元测试失败,
Expected: 8.5d
But was: 8.4900000000000002d
当我调试方法时返回8.49那么单元测试从哪里得到长数字,最后是2?
答案 0 :(得分:1)
'double'是一个脏技巧来操纵分数......: - )
在谈论双打时,你不应该测试平等。
正确的测试方法是:
Math.Abs(8.50 - MyClass.Converter(24)) < TOLERANCE
“容忍度”是指接受多少差异。
实施例
for TOLERANCE == 0.001
8.5004 == 8.50
8.4995 == 8.50
for TOLERANCE == 0.01
8.504 == 8.50
8.495 == 8.50