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

Vij*_*a s 2 nunit assert

我有这两个值:

Expected Value (fResult)= 103393.431493782901937514
Actual Value   (output) = 103393.431493782901937514
Run Code Online (Sandbox Code Playgroud)

当我断言价值时,我的预期结果被认为是 103393.431493783m

因此,我的 Assert 失败了。任何人都可以在这方面提供帮助。

Assert.That(output, Is.EqualTo(fResult));
Run Code Online (Sandbox Code Playgroud)

更多信息:实际值和预期值都是十进制数据类型,

[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));
}
Run Code Online (Sandbox Code Playgroud)

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

Thi*_* Sá 5

您需要提供容差级别,并且不能将 adecimal作为TestCase参数传递。您提供的代码将最后一个值作为 a 传递double,因此在您运行断言时进行舍入。您可以通过使用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));
}
Run Code Online (Sandbox Code Playgroud)