xUnit 断言两个值相等,但有一定的容忍度

nic*_*wdy 14 c# xunit assertion

我正在尝试比较两个数字的精度和一些容差。

这是在 nUnit 中检查它的方式:

Assert.That(turnOver, Is.EqualTo(turnoverExpected).Within(0.00001).Percent);
Run Code Online (Sandbox Code Playgroud)

我正在尝试在 xUnit 中做同样的事情,但这就是我想出的全部内容:

double tolerance = 0.00001;
Assert.Equal(turnOver, turnoverExpected, tolerance);
Run Code Online (Sandbox Code Playgroud)

这不会编译,因为Assert.Equal不接受第三个类型的参数double

任何人都知道在 xUnit 中执行此操作的好方法吗?

Ole*_*egI 13

您可能稍微误解了方法中的最后一个参数(精度)Assert.Equal(expected, actual, precision)

 /// <param name="precision">The number of decimal places (valid values: 0-15)</param>
Run Code Online (Sandbox Code Playgroud)

所以,举例来说,如果你想比较0.000210.00022和你有兴趣在比较只有4位小数,你可以做到这一点(它会返回true):

Assert.Equal(0.00021, 0.00022, 4); // true
Run Code Online (Sandbox Code Playgroud)

这将返回false

Assert.Equal(0.00021, 0.00022, 5); // false
Run Code Online (Sandbox Code Playgroud)


Fel*_*fer 8

您可以使用FluentAssertions

float value = 3.1415927F;
value.Should().BeApproximately(3.14F, 0.01F);
Run Code Online (Sandbox Code Playgroud)


Ste*_*eve 5

您可以Assert.InRange()在签名所在的位置使用 ,

public static void InRange<T>(T actual, T low, T high) where T : IComparable
Run Code Online (Sandbox Code Playgroud)