2014-04-01 45 views
0

如何測試Xml文件更新程序方法?單元測試LINQ to Xml方法

public static void AllowComp(string Name) 
{ 
var xml = XDocument.Load(XmlPath); 
var comp = xml.Descendants("components").Single(c => c.Attribute("key").Value == Name); 
comp.Attribute("allow").Value = "yes"; 
xml.Save(XmlPath);  
} 

謝謝

+2

你不能單元測試該方法。首先,它做了很多事情,其次它有副作用。當然兩者都有關係。分離出方法的文件系統部分,你將得到一個純函數,它接受一個XDoc並返回一個XDoc。這將是可測試的。 – Aron

+0

做喲意味着我需要另一種方法嗎? public XDocument Update(XDocument file,string Name) var comp = xml.Descendants(「components」)。Single(c => c.Attribute(「key」)。Value == Name); comp.Attribute(「allow」)。Value =「yes」; 返回文件; } – user3409988

+0

然後第一個方法將是公共靜態void AllowComp(string Name) {0} xml = XDocument.Load(XmlPath); var XDoc = Update(xml,Name); xml.Save(XmlPath); } – user3409988

回答

0

我會刪除XDocument.Load(xmlpath中),以及保存方法來自己的界面。例如IXmlComputation。現在你可以寫幾個測試。

a。刪除Load方法並返回一個假xml內容。單位測試條件

var comp = xml.Descendants("components").Single(c => c.Attribute("key").Value == Name); 
comp.Attribute("allow").Value = "yes"; 

b。確保.Save(XmlPath);叫做。創建一個IXmlComputation的模擬並驗證.Save方法被調用。

public interface IXmlComputation 
{ 
    public XDcoument Load(string xmlPath); 
    public void Save(string xmlPath); 
}