Mocking indexed property

断了今生、忘了曾经 提交于 2019-12-06 22:05:46

问题


I am writing unit tests using Moq. I have created a mock object. Now when i try to mock its property i am getting error "An expression tree may not contain an indexed property"

here is my code.

public Node GetNode(IMyInterface interface, string itemName)
{
    return interface.Items[itemName];
}

Here is the unit test

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);

This line is giving me error.

mock.Setup(f => f.Items[itemName]).Returns(expected);

How can i moq this function.


回答1:


Interface was a COM object and there were get function, so instead of directly accessing property using indexer use get function,

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



回答2:


Using Moq in ASP.NET Core 2.2, the get_Items setup does not work. But this does:

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


来源:https://stackoverflow.com/questions/11520291/mocking-indexed-property

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!