[英]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.