Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# moq:使用Setup()时,如何确定方法参数的相等性?_C#_Unit Testing_Mocking_Moq - Fatal编程技术网

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

C# moq:使用Setup()时,如何确定方法参数的相等性?,c#,unit-testing,mocking,moq,C#,Unit Testing,Mocking,Moq,我正在使用Setup()方法设置接口的模拟实例的行为 我正在设置的方法(我们称之为DoSomething())接受一个类的实例(我们称该类为Foo) Foo-Foo=//现有的Foo实例 Mock Mock=新Mock(); mock.Setup(x=>x.DoSomething(foo)).Returns(1); 我遇到的问题是,当我使用mock时,它与设置不匹配,因此从不返回1 有人能帮忙吗?Moq如何确定提供给设置方法的参数是否相等?我的问题的答案是Moq使用.Equals来确定设置方法

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

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

Foo-Foo=//现有的Foo实例
Mock Mock=新Mock();
mock.Setup(x=>x.DoSomething(foo)).Returns(1);
我遇到的问题是,当我使用mock时,它与设置不匹配,因此从不返回1


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

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

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

  • 使用
    object.Equals
  • 如果
    object.Equals
    失败,并且值实现了
    IEnumerable
    使用
    SequenceEqual
    (对每个元素使用
    object.Equals
  • 如果上述两项都失败,则返回
    false

  • R#在这里是一个很大的帮助,因为它可以为您的类自动生成Equals方法。请注意,它似乎使用
    .Equals(object)
    ,而不是任何
    .Equals(T)
    (如果您的类实现了
    IEquatable
    Foo foo = // Existing foo instance
    Mock<IMyInterface> mock = new Mock<IMyInterface>();
    mock.Setup(x => x.DoSomething(foo)).Returns(1);