c# - 如何验证 Moq 中的对象类型参数

标签 c# unit-testing moq

我想用匿名参数测试方法执行,但属性已知。

public interface IToTest
{
   void MethodToTest(object data);
}

这就是我尝试实现这一目标的方式:

Mocker.Mock<IToTest>
   .Verify(x=>x.MethodToTest(
      It.Is<object>(
         obj=>obj.Equals(new { DataProperty = "Test"})
      )),
      Times.Once());

测试未通过。

我不想用

It.IsAny<object>()

因为我知道预期的数据。

最佳答案

您需要在委托(delegate)中使用反射来进行比较,或者使用类似 FluentAssertions 的东西来卸载繁重的工作

例如

//...

var expected = new { 
    DataProperty = "Test" 
    //...known properties
};

Func<object, bool> match = _ => {
    _.Should().BeEquivalentTo(expected);
    return true;
};

Mocker.Mock<IToTest>
    .Verify(x =>
        x.MethodToTest(It.Is<object>(obj => match(obj))),
        Times.Once());

或者,您可以改为在回调中捕获对象参数,然后使用流畅的断言断言捕获的参数。

关于c# - 如何验证 Moq 中的对象类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55649332/

相关文章:

c# - 将imageUrl转换为byte[]进行缓存

c# - NetFramework 应用程序在同一解决方案中引用 NetFramework 库,在另一个解决方案中引用 NetStandard 库。 : could not load file or assembly

java - PowerMock + TestNg | PowerMock + TestNg | PowerMock + TestNg预期异常不起作用

c# - xUnit.net 中的测试参数化类似于 NUnit

c# - 如何创建 Outlook "internet calendar subscription"?

c# - 正则表达式从 url 中提取域

c# - 最小起订量和代码契约(Contract)

c# - 如何使用 AutoMapper 模拟列表转换

unit-testing - 如何使用 JUnit 在 android 中对 Firestore 进行单元测试?

C# 如何测试对接口(interface)的引用