RhinoMocks期望与动态参数

时间:2013-04-09 19:07:53

标签: unit-testing tdd rhino-mocks dynamicobject

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

我想设定这样的期望:

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

但我觉得这在我的考试中留下了空白。有没有其他替代方法来模拟具有接受动态参数的方法的依赖项?

1 个答案:

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

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