11

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

我怎样才能起订量这个功能。

4

2 回答 2

14

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

mock.Setup(f => f.get_Items(itemName)).Returns(expected); 
于 2012-07-17T11:23:34.987 回答
1

在 ASP.NET Core 2.2 中使用 Moq,get_Items 设置不起作用。但这确实:

Mock<IConfiguration> configuration = new Mock<IConfiguration>();
configuration.Setup(x => x[key]).Returns(value);
于 2019-03-15T11:02:50.993 回答