[英]Mock a method with List<int> as parameter and return List<> with Moq
[英]Mock method return based on object parameter
我有以下(简化)代码:
public string methodName(ClassType object)
{
If(object.value == 1)
return "Yes";
else If(object.value == 2)
return "No";
else
return "whatever";
}
然后,我在单元测试中调用此方法,并且需要根据对象值模拟返回类型:
_Service.Setup(x => x.methodName(new methodName { value = 1}).Returns("Yes");
_Service.Setup(x => x.methodName(new methodName { value = 2}).Returns("No");
我知道我写的是错误的-但是我如何实现呢?
您走在正确的轨道上。 使用Moq,您需要准确指定应与每个输入匹配的设置。 您可以这样做:
_Service.Setup(x => x.methodName(It.IsAny<ClassType>())).Returns("whatever");
_Service.Setup(x => x.methodName(It.Is<ClassType>(o => o.value == 1))).Returns("Yes");
_Service.Setup(x => x.methodName(It.Is<ClassType>(o => o.value == 2))).Returns("No");
此处的第一行将模拟程序设置为在使用任何值调用此方法时均返回“无论如何”。 以下两行覆盖了特定值的行为。
我对Moq不太熟悉,但是我认为下面的方法可以做到。 您应该为参数的每个可能值提供一个“ Returns
”:
_Service.Setup(x => x.methodName(It.Is<ClassType>(y => y.value == 1))).Returns("Yes");
_Service.Setup(x => x.methodName(It.Is<ClassType>(y => y.value == 2))).Returns("No");
这样,无论何时使用object.value == 1
调用methodName
-method时,都会返回"Yes"
,而object.value == 2
解析为返回"No"
的方法。
但是对我来说,这意义不大,因为您正在methodName
具有完全相同行为的methodName
行为。 我想这只是为了研究。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.