【发布时间】:2011-05-06 15:26:23
【问题描述】:
试图检查和论证并需要检索它。起订量是多少?或者在最小起订量中做到这一点的方法?
【问题讨论】:
标签: moq rhino-mocks
试图检查和论证并需要检索它。起订量是多少?或者在最小起订量中做到这一点的方法?
【问题讨论】:
标签: moq rhino-mocks
想通了,利用模拟设置上的回调功能
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;
});
然后您可以对捕获的值进行断言;
【讨论】:
从 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]);
}
当然这只是一个示例,在现实世界的代码中,您必须更加小心使用此方法,主要是因为所有参数都可以作为 objects 访问,而不是像 Callback 中的类型化参数。此外,这些调用不与 Setup 绑定,它是对模拟类的所有调用的列表。
【讨论】: