使用Moq模拟foreach循环

Mor*_*ten 5 c# unit-testing moq

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

        foreach (XmlNode xmlNode in nodes)
        {
            //Do something with node
        }
Run Code Online (Sandbox Code Playgroud)

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

k.m*_*k.m 9

foreach呼叫GetEnumerator引擎盖下,这就是你需要模拟的内容:

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

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