无论如何都要模拟一个采用动态参数的方法吗?
我想设定这样的期望:
_hasher.Expect(h => h.ComputeHash(Arg<dynamic>.Matches(o=> o.PropertyA == "123"))).Return("some hash");
我收到错误:表达式树可能不包含动态表达式。我当然可以这样做:
_hasher.Expect(h => h.ComputeHash(Arg<object>.Is.Anything)).Return("some hash");
但我觉得这在我的考试中留下了空白。有没有其他替代方法来模拟具有接受动态参数的方法的依赖项?
答案 0 :(得分:2)
试试这个:
_hasher.Expect(h => h.ComputeHash(Arg<object>.Is.Anything)).Return("some hash")
.WhenCalled(x =>
{
dynamic actual = x.Arguments[0];
Assert.AreEqual("123", actual.PropertyA);
});
当然,这有点像黑客,但它确实有效,并且当测试失败时它会为您提供有用的信息。