无论参数如何,都完全指定模拟方法的返回值

时间:2015-12-11 14:16:01

标签: c# unit-testing moq

假设我有一个包含方法public int Add(int, int)的模拟器,我希望模拟返回5是否可以指定AddTwoNumbers上的任何调用返回5

我已经知道我可以使用

mock.Setup(n => n.Add(It.IsAny<int>(), It.IsAny<int>()).Returns(5);

但是如果add方法更改为使用浮点数,或者超过两个int,则使用此break进行测试,而能够说“对Add return 5的所有调用”将有助于解耦测试。

1 个答案:

答案 0 :(得分:4)

不,你不能用Moq做到这一点。唯一的API Moq公开指定返回方法的值是您已经显示的方法。显然,执行此设置需要匹配类型参数才能进行编译。我认为您正在寻找更松散类型的API,例如:

mock.SetupMethodsNamed("Add").Returns(5);

如果这是您正在寻找的内容,请随时open an issue with the Moq project;他们通常对建议非常开放,并且可能能够指出这种方法的问题或者为什么没有实施。

但是,我认为这样做没有任何实际好处。如果您试图保护您的代码免受未来更改的影响,那么您如何才能知道5始终是一种合理的返回类型?如果您只是想保存一些工作(即一次性设置int重载和float重载),那么只需编写一个方法来完成它们并完成它们。