Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mocking indexed property

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.

like image 334
fhnaseer Avatar asked Jul 17 '12 10:07

fhnaseer


1 Answers

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); 
like image 51
fhnaseer Avatar answered Sep 20 '22 16:09

fhnaseer