Mocking foreach loop with Moq

c#, moq, unit-testing

Solution

The `foreach` calls `GetEnumerator` under the hood and that's what you need to mock:

var xmlNodesMock = new Mock<XmlNodeList>();
xmlNodesMock
    .Setup(l => l.GetEnumerator())
    .Returns(new XmlNode[] { /* values go here */ }.GetEnumerator());

Naturally you need to initialize `XmlNode` array in `Returns` method with actual values. Keep in mind that mocked list has to be injectable to the tested method, so that you can replace actual implementation.

Problem

I want to loop throug a XmlNodeList. How do you mock a XmlNodeList in Moq, so you can loop through it like in a foreach loop: ``` foreach (XmlNode xmlNode in nodes) { //Do something with node } ``` I have tried to set up via a the `SetupSequence` method, but I haven't been able to create the desired mock.

Original source