最小起订量:如何设置 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>
),您可以直接实例化它。
我想模拟一个 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>
),您可以直接实例化它。