本文介绍了如何使用嘲笑匿名类型的设置吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下资料库:

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

和我试图模拟出这个仓库作为呼叫:

and I am trying to mock out a call to this repository as:

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



然而,而不是在

However instead of passing in

Moq.It.IsAny<object>()

我要通过匿名类型

new {Activated = true, Enabled = true}

让我可以设置我的期望,正确的匿名类型被使用。

so that I can setup my expectation that the correct anonymous type is used.

推荐答案

您可以使用自定义的匹配有一点反思的帮助:

You can use custom matchers with a bit of reflection help:

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



其中, HasProperties 方法按下述方式实现:

Where HasProperties method is implemented as follows:

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");
        });
}    

这篇关于如何使用嘲笑匿名类型的设置吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-13 12:53