Moq相当于Rhino Mock的GetArgumentsForCallsMadeOn

时间:2011-05-06 15:26:23

标签: moq rhino-mocks

尝试检查和参数,需要检索它。什么是Moq的等价物?或者在Moq中这样做的方法?

2 个答案:

答案 0 :(得分:7)

利用Mock Setup上的回调功能

计算出来
int captured_int;

mocked_obj.Setup(x => x.SomeMethod(It.IsAny<int>()))
    .Callback<int>(x => captured_int = x);

如果您的方法有多个参数

int captured_int;
object captured_object;

mocked_obj.Setup(x => x.SomeMethod(It.IsAny<int>(), It.IsAny<object>()))
    .Callback<int, object>((i, o) => {
                                         captured_int = i;
                                         captured_object = o;
                                     });

然后你可以对捕获的值进行断言;

答案 1 :(得分:0)

从Moq 4.9.0开始,您可以访问模拟对象的调用列表并对其进行断言,而无需回调:

[Test]
public void TestMoq()
{
    var someClass = new Mock<ISomeClass>();

    someClass.Object.SomeMethod(42, null);
    someClass.Object.SomeMethod(88, "Hello");

    // First invocation
    Assert.AreEqual(42, (int) someClass.Invocations[0].Arguments[0]);
    Assert.IsNull(someClass.Invocations[0].Arguments[1]);

    // Second invocation
    Assert.AreEqual(88, (int) someClass.Invocations[1].Arguments[0]);
    Assert.AreEqual("Hello", someClass.Invocations[1].Arguments[1]);
}

当然,这只是一个例子,在现实世界的代码中,您必须更加谨慎地使用此方法,主要是因为所有参数都可以通过object来访问,而不是像{{1 }}。同样,这些调用并不与Callback绑定,它是模拟类上所有所有调用的列表。