模拟索引属性

时间:2012-07-17 10:08:38

标签: c# unit-testing moq

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

我怎样才能使用此功能。

2 个答案:

答案 0 :(得分:12)

接口是一个COM对象并且有get函数,所以不使用索引器直接访问属性而是使用get函数,

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

答案 1 :(得分:0)

在ASP.NET Core 2.2中使用Moq,get_Items安装程序不起作用。但这确实是

Mock<IConfiguration> configuration = new Mock<IConfiguration>();
configuration.Setup(x => x[key]).Returns(value);