指定模拟方法';s返回的值完全与参数无关

本文关键字:参数 返回 方法 模拟 | 更新日期: 2023-09-27 18:26:23

假设我有一个包含方法public int Add(int, int)的mock,并且我希望mock返回5,有没有办法指定对AddTwoNumbers的任何调用都返回5

我已经知道我可以使用

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

但是,如果add方法更改为使用float,或者超过两个int,则使用此break进行测试,而能够说"所有对add的调用都返回5"将有助于解耦测试。

指定模拟方法';s返回的值完全与参数无关

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

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

如果这是你想要的,请随时向Moq项目提出问题;他们通常对建议持开放态度,并可能指出这种方法的问题或为什么没有实施。

然而,我看不出这样做有任何真正的好处。如果您试图保护您的代码不受未来更改的影响,那么您怎么知道5将始终是一个合理的返回类型呢?如果你只是想节省一些工作(即一次性设置int过载和float过载),那么只需编写一个方法来同时完成这两项工作即可。