Fab*_*816 4 c# precision nunit testcase
我有一个算法可以在摄氏度和华氏度之间转换值。为了测试它是否适用于各种值,我使用 NUnit 的测试用例,如下所示:
[TestCase( 0, Result = -17.778 )]
[TestCase( 50, Result = 10 )]
public double FahrenheitToCelsius(double val) {
return (val - 32) / 1.8;
}
Run Code Online (Sandbox Code Playgroud)
问题是第一个测试用例失败,因为它测试完全匹配。
我发现的一种解决方案是执行以下操作:
[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 );
}
Run Code Online (Sandbox Code Playgroud)
但我对此不太满意。我的问题是:
可以在测试用例中定义结果的容差吗?
更新:
为了澄清,我正在寻找类似的内容:
[TestCase( 0, Result = 1.1, Tolerance = 0.05 )]
Run Code Online (Sandbox Code Playgroud)
Fra*_*tha 10
NUnit 还提供了该DefaultFloatingPointTolerance属性。
您可以使用它在方法或类级别设置默认容差。
[TestCase( 0, Result = -17.778 )]
[TestCase( 50, Result = 10 )]
[DefaultFloatingPointTolerance(0.05)]
public double FahrenheitToCelsius(double val) {
return (val - 32) / 1.8;
}
Run Code Online (Sandbox Code Playgroud)
这种方法可以使您的代码最少,因为您不必添加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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1777 次 |
| 最近记录: |