完全不管参数如何指定模拟方法的 return 值

Specify mocked method's return value entirely regardless of parameters

说我有一个包含方法 public int Add(int, int) 的模拟,我希望模拟 return 5 有没有办法指定对 AddTwoNumbers 的任何调用 returns 5?

我已经知道我可以使用

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

但如果添加方法更改为使用浮点数或两个以上的整数,则使用此中断进行测试,而能够说 'all calls to Add return 5' 将有助于解耦测试。

不,您不能使用 Moq 执行此操作。唯一 API Moq 公开指定 return 方法的值是您显示的方法。显然执行此设置需要类型参数匹配才能编译。我认为您正在寻找类型更松散的 API,例如:

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

如果这正是您要找的,请随时 open an issue with the Moq project;他们通常对建议持开放态度,也许能够指出此方法的问题或未实施的原因。

但是,我看不到这样做有任何真正的好处。如果您试图保护您的代码免受将来的更改,那么您怎么知道 5 将始终是一个明智的 return 类型?如果您只是想节省一些工作(即一次性设置 int 重载和 float 重载),那么只需编写一个方法来完成这两个操作并完成它。