Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模拟对象能否设置为返回两个所需的结果?_C#_Unit Testing_Mocking_Moq - Fatal编程技术网

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);

使用什么样的模拟框架?构建时间远远超过这里回答这个问题所需的时间:(