我想循环遍历XmlNodeList。如何在Moq中模拟一个XmlNodeList,以便您可以像在foreach循环中一样进行遍历:
foreach (XmlNode xmlNode in nodes)
{
//Do something with node
}
我曾试过通过SetupSequence
方法进行设置,但是我无法创建所需的模拟。
我想循环遍历XmlNodeList。如何在Moq中模拟一个XmlNodeList,以便您可以像在foreach循环中一样进行遍历:
foreach (XmlNode xmlNode in nodes)
{
//Do something with node
}
我曾试过通过SetupSequence
方法进行设置,但是我无法创建所需的模拟。
foreach
在幕后调用 GetEnumerator
,这就是您需要模拟的内容:
var xmlNodesMock = new Mock<XmlNodeList>();
xmlNodesList
.Setup(l => l.GetEnumerator())
.Returns(new XmlNode[] { /* values go here */ }.GetEnumerator());
自然地,您需要在Returns
方法中使用实际值初始化XmlNode
数组。请记住,模拟的列表必须可注入到被测试的方法中,以便您可以替换实际实现。
foreach
是否会隐式调用被foreach
的对象的GetEnumerator
方法?也许模拟该方法可以帮你找到你想要的结果。 - tmesser