想象一下这门课
public class Foo {
private Handler _h;
public Foo(Handler h)
{
_h = h;
}
public void Bar(int i)
{
_h.AsyncHandle(CalcOn(i));
}
private SomeResponse CalcOn(int i)
{
...;
}
}
Mo(q)cking Handler在Foo的测试中,我如何能够检查什么Bar()已传递给_h.AsyncHandle?
Gamlor的回答很适合我,但我认为我应该扩展John Carpenter的评论,因为我正在寻找一个涉及多个参数的解决方案。我想其他无意中看到这个页面的人可能也有类似的情况。我在Moq文档中找到了这个信息。
我将使用Gamlor的例子,但让我们假设AsyncHandle方法接受两个参数:一个字符串和一个somerresponse对象。
var mock = new Mock<Handler>();
string stringResult = string.Empty;
SomeResponse someResponse = null;
mock.Setup(h => h.AsyncHandle(It.IsAny<string>(), It.IsAny<SomeResponse>()))
.Callback<string, SomeResponse>((s, r) =>
{
stringResult = s;
someResponse = r;
});
// do your test
new Foo(mock.Object).Bar(22);
Assert.AreEqual("expected string", stringResult);
Assert.IsNotNull(someResponse);
基本上,您只需要添加另一个具有适当类型的It.IsAny<>(),向Callback方法添加另一个类型,并适当更改lambda表达式。