C# 模拟对象能否设置为返回两个所需的结果?
可以使用模拟对象返回多个期望的结果,如下面所示吗C# 模拟对象能否设置为返回两个所需的结果?,c#,unit-testing,mocking,moq,C#,Unit Testing,Mocking,Moq,可以使用模拟对象返回多个期望的结果,如下面所示吗 mockObject.Setup(o => o.foo(It.IsAny<List<string>>())).Returns(fooBall); mockObject.Setup(o => o.foo(It.IsAny<int>())).Returns(fooSquare); mockObject.Setup(o=>o.foo(It.IsAny()).Returns(fooBall); Setup
mockObject.Setup(o => o.foo(It.IsAny<List<string>>())).Returns(fooBall);
mockObject.Setup(o => o.foo(It.IsAny<int>())).Returns(fooSquare);
mockObject.Setup(o=>o.foo(It.IsAny()).Returns(fooBall);
Setup(o=>o.foo(It.IsAny()).Returns(fooSquare);
是的,您可以使用这些设置。因此,foo
方法调用的参数是不同的(任何整数和任何字符串列表),这里有两个不同的设置,每个设置都有自己的返回值。如果您有相同的参数,则最后一个安装程序将替换以前的安装程序
请记住-每个设置都是由您调用的成员和传递的参数定义的。在您的示例中,因为这两个
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);
mockObject.Setup(o=>o.foo(It.IsAny())。返回(defaultFoo);
Setup(o=>o.foo(It.Is(i=>i==5)).Returns(fooBall);
mockObject.Setup(o=>o.foo(It.Is(i=>i>50&&i%2==0)))
.返回(fooSquare);
使用什么样的模拟框架?构建时间远远超过这里回答这个问题所需的时间:(