Nunit 即使十进制数字正确,断言也会失败

Nunit 即使十进制数字正确,断言也会失败,nunit,assert,Nunit,Assert,我有两个价值观: Expected Value (fResult)= 103393.431493782901937514 Actual Value (output) = 103393.431493782901937514 当我对该值进行断言时,我的预期结果被认为是 1033 93.4314937 83M < /代码> 正因为如此,我的断言失败了。在这方面谁能帮忙 Assert.That(output, Is.EqualTo(fResult)); 更多信息:实际值和预期值都是十进制数据类

我有两个价值观:

Expected Value (fResult)= 103393.431493782901937514
Actual Value   (output) = 103393.431493782901937514

当我对该值进行断言时,我的预期结果被认为是<代码> 1033 93.4314937 83M < /代码>

正因为如此,我的断言失败了。在这方面谁能帮忙

Assert.That(output, Is.EqualTo(fResult));
更多信息:实际值和预期值都是十进制数据类型

[TestCase("value1", "value2", 5, 103393.431493782901937514)]
public void converFormulaforPressure(String Fromunit, String toUnit, decimal Avalue, decimal fResult) {
    var output = ut1.Convert(ut1.GetUnit("Pressure", Fromunit), ut1.GetUnit("Pressure", toUnit), Avalue).Val;

    Assert.That(output, Is.EqualTo(fResult));
}

ut1.Convert是一种转换值并给出实际结果的方法。

您需要提供公差级别您不能将
十进制
作为
测试用例
参数传递。您提供的代码以
双精度传递最后一个值,因此在运行assert时舍入。您可以使用
TestCaseSource
来解决这个问题

以下测试通过:

private static readonly object[] TestCases = {
    new object[] {"value1", "value2", 5m, 103393.431493782901937514m}
};

[Test, TestCaseSource("TestCases")]
public void TestExample(string fromUnit, string toUnit, decimal value, decimal fResult) {
    //Replace the line below with your convert method using values from testCase
    var output = 103393.431493782901937514m;

    Assert.That(output, Is.EqualTo(fResult).Within(0.00000000000001));
}

我曾尝试使用“在(0.00000000 1)或在(0.00000000 5)范围内”来确定容差级别,对于某些测试用例,它失败了,因为我必须在小数点匹配后确认14位数字。然后您应该将容差级别增加到14位:
。在(0.00000000000000 1)
范围内,即使NUB的小数点超过14位,VS 2013在预期值中采用的小数位数(103393.4314937)较少,测试用例失败