Col*_*ett 23 c# floating-point unit-testing .net-3.5
我有一些C#单元测试执行一些浮动/双重操作,我想对它们进行单元测试.由于舍入错误,Assert.AreEqual不足.
以单位转换为例.10.5米到英尺的转换系数是3.281,所以我得到34.4505.使用更准确的转换因子给了我34.4488189.我想在0.1内测试这个(所以34.3488-34.5488会通过测试).
我可以确定在我的单元测试中使用容差手动测试该值,但这是高度重复的,并且失败消息不会非常具有描述性(同样不必编写我自己的Assert失败消息):
Assert.IsTrue(Math.Abs(34.4488189 - value) < 0.1);
Run Code Online (Sandbox Code Playgroud)
如何将我的浮点运算单元测试到一定的容错范围内? 我找不到任何与VS一起提供的Assert类.我错过了它还是我必须自己滚动?
是否有标准做法测试花车/双打要记住?
cka*_*ras 38
MSTest中的Assert.AreEqual具有接受delta(容错)参数的重载:
public static void AreEqual (double expected, double actual, double delta)
Run Code Online (Sandbox Code Playgroud)
例如:
Assert.AreEqual(34.4488189, value, 0.1);
Run Code Online (Sandbox Code Playgroud)
或者,对于尽可能小的容忍度:
Assert.AreEqual(34.4488189, value, double.Epsilon);
Run Code Online (Sandbox Code Playgroud)