我的测试以此结束:
model.AssertWasCalled(m => m.CalculateBeta(
Arg<double>.Is.Equal(50),
Arg<double>.Is.Equal(3.74593228));
我想使用像Microsoft.VisualStudio.TestTools.UnitTesting.Assert
中提供的delta值来测试它。Assert.AreEqual(3.745932, result, 0.000001);
有办法做到这一点吗?
答案 0 :(得分:1)
是的,有一种更简单的方法:
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)
)
);
实际上,您可以将任何谓词传递给Arg<T>.Matches()
以特别验证每个参数。
答案 1 :(得分:0)
我想出了这个暴行。很想看到一些更好的解决方案。
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));