2

无论如何要模拟采用动态参数的方法吗?

我想设定这样的期望:

_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");

但我觉得这在我的测试中留下了一个空白。是否有任何其他替代方法可以模拟具有接受动态参数的方法的依赖项?

4

1 回答 1

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);
        });

当然,这有点像 hack,但它确实有效,并且在测试失败时会为您提供有用的消息。

于 2013-04-23T19:10:37.087 回答