C# 使用AssertWasCalled测试浮点相等性

C# 使用AssertWasCalled测试浮点相等性,c#,floating-point,rhino-mocks,C#,Floating Point,Rhino Mocks,我有一个测试以以下内容结束: model.AssertWasCalled(m => m.CalculateBeta( Arg<double>.Is.Equal(50), Arg<double>.Is.Equal(3.74593228)); 有办法吗?我想出了这个暴行。希望看到更好的解决方案 var values = new List<Tuple<double, double>> { Tuple.Create(50.0

我有一个测试以以下内容结束:

model.AssertWasCalled(m => m.CalculateBeta(
    Arg<double>.Is.Equal(50),
    Arg<double>.Is.Equal(3.74593228));

有办法吗?

我想出了这个暴行。希望看到更好的解决方案

var values = new List<Tuple<double, double>>
{
    Tuple.Create(50.0, 0.1),
    Tuple.Create(3.745932, 0.000001),
};
Predicate<double> expected = (x) =>
{
    var value = values[0];
    values.RemoveAt(0);

    Assert.AreEqual(value.Item1, x, value.Item2);
    return true;
};
model.AssertWasCalled(m => m.CalculateBeta(
    Arg<double>.Matches((x) => expected(x)),
    Arg<double>.Matches((x) => expected(x));
var值=新列表
{
Tuple.Create(50.0,0.1),
Tuple.Create(3.745932,0.000001),
};
预期谓词=(x)=>
{
var值=值[0];
值。RemoveAt(0);
Assert.AreEqual(value.Item1,x,value.Item2);
返回true;
};
调用model.assertwas(m=>m.CalculateBeta(
参数匹配((x)=>预期(x)),
参数匹配((x)=>预期(x));

是的,有一个更简单的方法:

test.AssertWasCalled(
    t => t.CalculateBeta(
        Arg<double>.Matches(a => Math.Abs(a - 50) < 0.01),
        Arg<double>.Matches(b => Math.Abs(b - 3.74593228) < 0.000001)
    )
);
test.assertwas调用(
t=>t.CalculateBeta(
参数匹配(a=>Math.Abs(a-50)<0.01),
参数匹配(b=>Math.Abs(b-3.74593228)<0.000001)
)
);

实际上,您可以将任何谓词传递到
Arg.Matches()
,以特别验证每个参数。

不确定我为什么没有想到这一点。我几乎不好意思在下面留下我的帖子:)谢谢
test.AssertWasCalled(
    t => t.CalculateBeta(
        Arg<double>.Matches(a => Math.Abs(a - 50) < 0.01),
        Arg<double>.Matches(b => Math.Abs(b - 3.74593228) < 0.000001)
    )
);