c# - 如何使用模拟匿名类型的设置?

标签 c# moq

我有以下存储库:

interface IReportingRepository where T: Report
{
     IEnumerable<T> GetReports<T>(object constraints);
}

我正在尝试模拟对这个存储库的调用:

var reportingRepostory = new Mock<IReportingRepository>();
                       reportingRepostory.Setup(x => 
                       x.GetReports<ServiceReport (Moq.It.IsAny<object>())).
                       Returns(new List<ServiceReport>(){Report1, Report2});

但是不是传入

Moq.It.IsAny<object>()

我要传匿名类型

new {Activated = true, Enabled = true}

这样我就可以设置我对使用正确匿名类型的期望。

最佳答案

您可以在反射帮助下使用自定义匹配器:

var reportingRepostory = new Mock<IReportingRepository>();
reportingRepostory
    .Setup(x => x.GetReports<ServiceReport>(HasProperties()))
    .Returns(new List<ServiceReport>(){Report1, Report2});

其中HasProperties方法实现如下:

private object HasProperties()
{
    return Match.Create(
        (object o)  =>
        {
            var properties = o.GetType().GetProperties();
            return properties.Any(p => p.Name == "Available")
                && properties.Any(p => p.Name == "Enabled");
        });
}    

关于c# - 如何使用模拟匿名类型的设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10299629/

相关文章:

c# - 添加或修改 True Type 字体 (TTF) 中字形的简单方法

c# - 使用 PInvoke 时,包含 bool 和 uint 的结构有什么区别?

c# - 如何使用 Mock (Moq) 捕获属性值的设置

wpf - MVVM 单元测试 - 消息总线只工作一次

c# - 在单元测试中正确使用最小起订量

c# - 单元测试中的模拟在 LINQ.Where 返回 null

c# - 打开MediaPlayer-线程中未处理事件

C# 工厂模式

c#设置私有(private)变量的值

c# - 使用 Moq 和 TDD,从哪里开始?