如何将结果容差添加到 NUnit 测试用例



我有一个算法,可以在摄氏度和华氏度之间转换一个值。为了测试它是否适用于广泛的值,我使用 NUnit 的测试用例,如下所示:

[TestCase( 0, Result = -17.778 )]
[TestCase( 50, Result = 10 )]
public double FahrenheitToCelsius(double val) {
    return (val - 32) / 1.8;
}

问题是第一个测试用例失败了,因为它测试了完全匹配。
我找到的一个解决方案是做这样的事情:

[TestCase( 0, -17.778 )]
[TestCase( 50, 10 )]
public void FahrenheitToCelsius2(double val, double expected) {
    double result =  (val - 32) / 1.8;
    Assert.AreEqual( expected, result, 0.005 );
}

但我对此不太满意。我的问题是:
是否可以在测试用例中定义结果的容差?

更新:
澄清一下,我正在寻找类似以下内容的内容:

[TestCase( 0, Result = 1.1, Tolerance = 0.05 )]

NUnit 还提供了 DefaultFloatingPointTolerance 属性。

可以使用它来设置方法或类级别的默认容差。

[TestCase( 0, Result = -17.778 )]
[TestCase( 50, Result = 10 )]
[DefaultFloatingPointTolerance(0.05)]
public double FahrenheitToCelsius(double val) {
    return (val - 32) / 1.8;
}

此方法使代码保持最小,因为您不必添加 expected 方法参数。

参考: https://docs.nunit.org/articles/nunit/writing-tests/attributes/defaultfloatingpointtolerance.html

向测试用例添加另一个参数:

[TestCase(0, -17.778, .005)]
[TestCase(50, 10, 0)]
public void FahrenheitToCelsius2(double fahrenheit, double expected, double tolerance)
{
    double result = (fahrenheit - 32) / 1.8;
    Assert.AreEqual(expected, result, tolerance);
}

最新更新