在RhinoMocks中,您可以告诉您的模拟对象忽略所有参数。而在Moq中,似乎您需要为每个参数指定It.IsAny()。但是,这对于ref和out参数无效。我如何测试以下方法,在其中需要Moq内部服务调用以返回特定结果:
public void MyMethod() {
// DoStuff
IList<SomeObject> errors = new List<SomeObject>();
var result = _service.DoSomething(ref errors, ref param1, param2);
// Do more stuff
}
测试方法:
public void TestOfMyMethod() {
// Setup
var moqService = new Mock<IMyService>();
IList<String> errors;
var model = new MyModel();
// This returns null, presumably becuase "errors"
// here does not refer to the same object as "errors" in MyMethod
moqService.Setup(t => t.DoSomething(ref errors, ref model, It.IsAny<SomeType>()).
Returns(new OtherType()));
}
更新:所以,将错误从“ref”更改为“out”可行。因此,真正的问题似乎是有一个无法注入的ref参数。
DoSomething
的签名吗?因为在你的示例中,它有 3 个参数out errors, param1, param2
,但是在你的测试中只用了两个参数out errors, It.IsAny<SomeType>()
。也许你正在模拟错误的重载,因为你的代码应该仍然可以工作,请参见 moq 帮助方法部分。 - nemesv