尝试检查和参数,需要检索它。什么是Moq的等价物?或者在Moq中这样做的方法?
答案 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
绑定,它是模拟类上所有所有调用的列表。