用 Moq 模拟 foreach 循环

问题描述 投票:0回答:1

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

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

我尝试通过

SetupSequence
方法进行设置,但我无法创建所需的模拟。

c# unit-testing moq
1个回答
11
投票

foreach
在底层调用
GetEnumerator
,这就是你需要模拟的:

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

当然,您需要使用实际值在

XmlNode
方法中初始化
Returns
数组。请记住,模拟列表必须可注入到测试方法中,以便您可以替换实际实现。

© www.soinside.com 2019 - 2024. All rights reserved.