【发布时间】:2012-07-16 05:51:32
【问题描述】:
我正在使用 Moq 编写单元测试。我创建了一个模拟对象。现在,当我尝试模拟它的属性时,我收到错误“表达式树可能不包含索引属性”
这是我的代码。
public Node GetNode(IMyInterface interface, string itemName)
{
return interface.Items[itemName];
}
这是单元测试
var expected = new Node();
var itemName = "TestName";
var mock = new Mock<IMyInterface>();
mock.Setup(f => f.Items[itemName]).Returns(expected);
var target = new MyClass();
var actual = target.GetNode(mock.Object, itemName);
Assert.AreEqual(expected, actual);
这一行给了我错误。
mock.Setup(f => f.Items[itemName]).Returns(expected);
我怎样才能moq这个功能。
【问题讨论】:
-
这不是起订量问题。表达式树不能包含错误状态的索引属性。您应该重构您的代码以访问列表中的项目而不使用索引。
-
我无法更改“interface.Items[itemName];”因为我是通过 COM 得到它的,所以在测试中可以通过任何方式做到这一点,
-
物品到底是什么?能否提供完整的接口定义?
-
它是一个节点列表(一个类),
-
好吧,既然抽象的全部意义在于将接口与实现分离,并且在一定程度上简化事情,如果它确实是一个通用 List
并且您正在测试接口属性,您可以使用 linq 运算符按名称检索项目。在您的财产中,您将进行 linq-COM 翻译。
标签: c# unit-testing moq