2012-07-17 39 views
9

我正在使用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); 

我该怎么办这个功能。

+0

这不是一个问题,起订量直接访问属性。表达式树不能包含索引属性,因为错误状态。您应该重构代码以访问列表中的项目,而不是使用索引。 – 2012-07-17 10:12:50

+0

我无法更改“interface.Items [itemName];”因为我通过COM获得它,任何方式在测试中做到这一点, – 2012-07-17 10:15:58

+0

什么是项目?你能提供完整的接口定义吗? – 2012-07-17 10:17:11

回答

12

接口是一个COM对象,并有得到的功能,所以不是使用索引使用获取函数,

mock.Setup(f => f.get_Items(itemName)).Returns(expected); 
+0

您是否尝试过'mock.Setup(f => f [itemName])。返回(预期);'?不知道它是否适用于您的情况(COM)(C#和.NET版本?),但看起来好多了。 – 2013-11-30 09:44:45