可以使用模拟对象返回多个所需的结果,如下所示吗?
mockObject.Setup(o => o.foo(It.IsAny<List<string>>())).Returns(fooBall);
mockObject.Setup(o => o.foo(It.IsAny<int>())).Returns(fooSquare);
答案 0 :(得分:3)
是的,您可以使用这些设置。因此foo
方法调用的参数是不同的(任何整数和任何字符串列表),这里有两个不同的设置,每个设置都有自己的返回值。如果你有相同的参数,那么最后的设置将取代之前的设置。
请记住 - 每个设置都是由您调用的成员和您传递的参数定义的。
答案 1 :(得分:2)
在您的示例中,因为两个foo
方法采用不同的参数类型,它们是重载,而且正如Sergey所说,这些被认为是编译器和Moq
完全独立的方法。
在您希望为相同方法返回不同结果的特定情况下,根据输入的值,您可以将It.Is<>
与谓词匹配器一起使用来指定过滤器要应用于参数。从最通用到最具体的定义这些,例如,只关注o.foo(int)
重载:
mockObject.Setup(o => o.foo(It.IsAny<int>())).Returns(defaultFoo);
mockObject.Setup(o => o.foo(It.Is<int>(i => i == 5))).Returns(fooBall);
mockObject.Setup(o => o.foo(It.Is<int>(i => i > 50 && i % 2 == 0)))
.Returns(fooSquare);