moq:使用Setup()时,如何确定方法参数的相等性?

时间:2012-11-08 15:11:44

标签: c# unit-testing mocking moq

我正在使用Setup()方法来设置模拟的接口实例的行为。

我正在设置的方法(让我们称之为DoSomething())接受一个类的实例(让我们调用类Foo)。

Foo foo = // Existing foo instance
Mock<IMyInterface> mock = new Mock<IMyInterface>();
mock.Setup(x => x.DoSomething(foo)).Returns(1);

我遇到的问题是,当我使用模拟时,它永远不会匹配设置,所以永远不会返回1.

有人可以帮忙吗? Moq如何确定提供给设置方法的参数是否相等?

2 个答案:

答案 0 :(得分:8)

我的问题的答案是Moq使用.Equals来确定设置方法的参数是否相等。

答案 1 :(得分:0)

要获得更详细的答案,Moq使用ConstantMatcher(链接到当前最新版本4.13.1)。该匹配器的实现是

  1. 使用object.Equals
  2. 如果object.Equals失败并且值实现IEnumerable,请使用SequenceEqual<object>(每个元素使用object.Equals
  3. 如果以上两项均失败,则返回false