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

Dav*_*vid 10 c# unit-testing moq mocking

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

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

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

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

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

Dav*_*vid 8

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


Sim*_*ech 6

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

  1. 使用object.Equals
  2. 如果object.Equals失败并且 value 实现IEnumerableuse SequenceEqual<object>(用于object.Equals每个元素)
  3. 如果以上都失败返回false