繁体   English   中英

根据对象参数返回模拟方法

[英]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的快速入门指南以获取更多详细信息,尤其是“ 匹配参数”部分。

我对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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM