使用Moq模拟foreach循环

时间:2012-10-31 16:11:29

标签: c# unit-testing moq

我想通过XmlNodeList循环。你如何模拟Moq中的XmlNodeList,所以你可以像在foreach循环中一样遍历它:

        foreach (XmlNode xmlNode in nodes)
        {
            //Do something with node
        }

我尝试通过SetupSequence方法设置,但我无法创建所需的模拟。

1 个答案:

答案 0 :(得分:9)

foreach调用了GetEnumerator,这就是你需要模拟的东西:

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

当然,您需要使用实际值在XmlNode方法中初始化Returns数组。请记住,模拟列表必须可以注入测试方法,以便您可以替换实际的实现。