最小起订量:如何设置 ToDictionary

Moq: How to Setup ToDictionary

我想模拟一个 Linq 表达式 returns 一个 Dictionary

Dictionary<string, string> properties = new Dictionary<string, string>()
{
    { "Service", "serviceTest" }
}
equipment.SetProperties(dmsElement.Properties.ToDictionary(x => x.Definition.Name, x => x.Value));

这是单元测试

fakeEquipment.Setup(e => e.Properties.ToDictionary(It.IsAny<Func<IDmsElementProperty, string>>(), It.IsAny<Func<IDmsElementProperty, string>>())).Returns(properties);

我收到以下错误:

System.NotSupportedException: 'Unsupported expression: ... => ....ToDictionary<IDmsElementProperty, string, string>(It.IsAny<Func<IDmsElementProperty, string>>(), It.IsAny<Func<IDmsElementProperty, string>>())

如何设置 ToDictionary 方法来检索预期值?

您不能模拟 ToDictionary 方法,因为它是 System.Enumerable 类型中的扩展方法。无论如何,该方法将枚举您的 .Properties 属性。 但是,您可以而且应该直接模拟 e.Properties.
您可以 return IPropertyCollection 接口的实现,或者如果问题不大,可以编写一个非常简单的适配器来公开底层集合(无论是字典还是列表)。 如果您有权访问现有的 class(例如,ListPropertyCollection<T>),您可以直接实例化它。