C#NUnit单元测试不使用正确的方法返回比较

时间:2015-08-26 09:22:19

标签: c# unit-testing

我有以下课程

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?

1 个答案:

答案 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