2009-11-19 79 views
1

我有一點困難。我有一個非常基礎的類,它具有返回特定XPath查詢結果的函數。單元測試函數XPath查詢結果?

這是我目前使用的代碼。

[TestFixture] 
public class MarketAtAGlance_Test 
{ 
    private XmlDocument document; 
    private MarketAtAGlance marketAtAGlance; 

    [SetUp] 
    public void setUp() 
    { 
     this.document = new XmlDocument(); 
     // load document from file located in the project 
     this.marketAtAGlance = new MarketAtAGlance(document); 
    } 

    [Test] 
    public void getHourlyImport_Test() 
    { 
     Assert.AreEqual(100.0d, marketAtAGlance.getHourlyImport()); 
    } 

    [Test] 
    public void getHourlyExport_Test() 
    { 
     Assert.AreEqual(1526.0d, marketAtAGlance.getHourlyExport()); 
    } 
} 

public class MarketAtAGlance 
{ 
    XmlDocument document; 

    public MarketAtAGlance(XmlDocument document) 
    { 
     this.document = document; 
    } 

    public double getHourlyImport() { 
     double value = Convert.ToDouble(document.SelectSingleNode("//information[@id=\"dat11\"]/new_val").InnerText); 

     return value; 
    } 

    public double getHourlyExport() { 
     double value = Convert.ToDouble(document.SelectSingleNode("//information[@id=\"dat12\"]/new_val").InnerText); 

     return value; 
    } 
} 

這是我第一次使用單元測試,所以我仍然不確定許多次要的事情。如您所見,我正在加載位於硬盤上的靜態XML文件。我應該有額外的依賴項還是將XML文本放在一個大字符串中?我正在加載一個較舊的XML文件(使用相同的格式),因爲我可以使用已知的值進行測試。

另外,我怎麼會去單元測試的XmlHttpReader(類,它在XML URL和負載它作爲一個文件?

我對設計問題或意見有何評論?

+0

我覺得保持測試數據的設置儘可能簡單很有幫助。這有助於揭示測試試圖完成的內容。 – Mark 2009-11-19 20:25:59

回答

1

我將構建測試設置中的XML,但限制XML你只需要什麼測試通過。它看起來像你的XML文檔可以是在這種情況下很簡單的。

<someRoot> 
    <someNode> 
     <information id='dat11'><new_val>100.0</new_val></information> 
     <information id='dat12'><new_val>1526.0</new_val></information> 
    </someNode> 
</someRoot> 

XML可以通過你的測試

我也不會測試XmlHttpReader,如果這是一個系統類。你可以嘲笑它的依賴。你可能需要用一些東西來包裝它,以幫助你輕鬆地將它解耦爲類的依賴。

1

對於你的第一個問題,你應該有一個大的XML字符串還是從文件中加載它。我會說要麼工作。說實話,雖然自從你從項目中的一個文件加載,我會把它作爲一個嵌入式資源保存在項目中,並通過反射來加載它。如果你的任何同事從他們的電腦上運行它,那將會把圖片結構混亂在圖片之外。我真正遇到的單元測試的唯一最佳做法是確保您正確測試並確保其他人可以輕鬆地運行測試。

對於第二個問題,關於XmlHttpReader。這將取決於你的輸出。如果你可以測試你有有效的XML,那就去做吧。我也會推薦負面測試。將它指向http://stackoverflow.com,或者您知道的URL將會出錯,並用適當的預期錯誤來修飾測試。