模拟索引属性

fhn*_*eer 10 c# unit-testing moq

我正在使用Moq编写单元测试.我创建了一个模拟对象.现在,当我尝试模拟其属性时,我收到错误"表达式树可能不包含索引属性"

这是我的代码.

public Node GetNode(IMyInterface interface, string itemName)
{
    return interface.Items[itemName];
}
Run Code Online (Sandbox Code Playgroud)

这是单元测试

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);
Run Code Online (Sandbox Code Playgroud)

这条线给了我错误.

mock.Setup(f => f.Items[itemName]).Returns(expected);
Run Code Online (Sandbox Code Playgroud)

我怎么能这个功能.

fhn*_*eer 12

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

mock.Setup(f => f.get_Items(itemName)).Returns(expected); 
Run Code Online (Sandbox Code Playgroud)

  • 你试过`mock.Setup(f =&gt; f[itemName]).Returns(expected);`吗?不确定它是否适用于您的情况 (COM)(什么 C# 和 .NET 版本?),但看起来好多了。 (2认同)