如何向NUnit TestCase添加结果容差

时间:2014-11-12 15:41:41

标签: c# nunit precision testcase

我有一个算法可以转换摄氏和远摄之间的值。为了测试它是否适用于各种各样的值我使用NUnit的TestCases如下:

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

问题是第一个TestCase因为测试精确匹配而失败 我发现的一个解决方案是做这样的事情:

[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中定义对结果的容差吗?

更新
为了澄清,我正在寻找以下内容:

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

2 个答案:

答案 0 :(得分:2)

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

[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);
}

答案 1 :(得分:0)

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