Using Moq to set indexers in C#

Posted by emddudley on Stack Overflow See other posts from Stack Overflow or by emddudley
Published on 2010-05-26T20:04:59Z Indexed on 2010/05/27 13:51 UTC
Read the original article Hit count: 296

Filed under:
|
|
|

I'm having trouble figuring out how to set indexers in C# with Moq. The Moq documentation is weak, and I've done a lot of searching... what I'd like to do is similar in the solution to How to Moq Setting an Indexed property:

var someClass = new Mock<ISomeClass>();
someClass.SetupSet(o => o.SomeIndexedProperty[3] = 25);

I want to modify the above to work for any index and any value so I can just do something like this:

someClass.Object.SomeIndexedProperty[1] = 5;

Currently I have the following, which works great for the indexed property getter, but if I ever set the value Moq ignores it:

var someValues = new int[] { 10, 20, 30, 40 };
var someClass = new Mock<ISomeClass>();
someClass.Setup(o => o.SomeIndexedProperty[It.IsAny<int>()])
    .Returns<int>(index => someValues[index]);

// Moq doesn't set the value below, so the Assert fails!
someClass.Object.SomeIndexedProperty[3] = 25;
Assert.AreEqual(25, someClass.Object.SomeIndexedProperty[3]);

© Stack Overflow or respective owner

Related posts about c#

Related posts about unit-testing