12

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

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

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

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

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

4

2 回答 2

8

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

于 2012-11-16T17:11:44.647 回答
1

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

  1. 采用object.Equals
  2. 如果object.Equals失败并且值实现IEnumerable使用SequenceEqual<object>object.Equals用于每个元素)
  3. 如果以上都失败返回false
于 2020-02-19T10:53:55.690 回答