[英]How does one unit test modifying an XML document?
我不知道如何开始为该方法创建单元测试:
public override void ModifyXmlDocument(Foo foo, string nodeToChange, string newValue)
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(foo.XmlPathAndFileName);
XmlElement rootElement = xmlDocument.DocumentElement;
// rest of method (to modify an XML doc) here
}
该方法只是在XML文档中找到元素/节点,并使用用户提供的值对其进行更新。 (该方法比此处显示的要复杂。)
我很难过的部分是了解如何执行此方法,而不依赖于硬盘。 但是xmlDocument.Load()
采用文件路径并从磁盘加载文件。 方法结束时,它将更新的文件保存回磁盘。
如何使该方法单元可测试?
有两种方法可以执行此操作,但是所有方法都需要重构代码。 ModifyXmlDocument
将需要将XmlDocument
作为参数,然后可以从那里对其进行模拟。
public void test_that_xml_is_loaded()
{
var sut = new SUT();
var xmldocumentfake = new Mock<XmlDocument>(){CallBase=true};
xmldocumentfake.Setup(x=>x.LoadXml(It.IsAny<String>()));
sut.ModifyXmlDocument(foo, nodeToChange, newValue, xmlDocumentfake.Object);
xmldocumentfake.Verify(x=>x.LoadXml(It.IsAny<String>()), Times.Once());
}
您也可以将XmlDocument
包装在另一个类中,该类可以编写为可以修改的抽象。 同样,您必须将其传递。
同样,正如安东尼·佩格拉姆(Anthony Pegram)所说的和我的意思:请注意不要违反单一责任原则 。 当测试太难编写时,通常是您违反了该原则的尖叫。
有两个选择:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.