2010-06-13 67 views

回答

6

正如rwwilden所示,如果您使用基於流的API而不是基於文件名的API,生活會更容易。在這裏使用嘲諷並不是非常合適,國際海事組織;你不是在做「協議測試」 - 你只是想要一個數據源。

您也可以提供過載是一個簡單實用的方法:

public Result ParseXml(string file) 
{ 
    using (Stream stream = File.OpenRead(file)) 
    { 
     return ParseXml(stream); 
    } 
} 

然後你可以合理安全測試方法 - 它在它沒有顯著的邏輯,畢竟。

現在你測試通過在代碼中使用硬編碼的字符串,然後調用Encoding.UTF8.GetBytes(xml)和建設所產生的字節數組圍繞MemoryStream ...但我一般基於流的API更願意使用不同的數據文件在我的測試項目中。將內容類型設置爲「嵌入資源」,然後使用Assembly.GetManifestResourceStream獲取測試文件的流。

如果這確實是一個普通的XML文件,但是您真的想自己解析嗎?是否有任何理由不希望將其留在框架中,並根據DOM API,LINQ to XML或XmlReader來表達您的API?

+0

對於其他人對此路徑工作方式感到困惑的地方,它看起來像下面這樣:'Your.Project.Name.SubFolder.FileName.extension'。 – crush 2014-04-17 19:56:03

3

所有您需要做的是找到一種方法來告訴你的班級讀什麼文件。所以這取決於你的班級是如何實施的。最簡單的辦法是這樣的:

public class ClassToTest : IClassToTest 
{ 
    public Result ParseXml(Stream xml) 
    { 
     // Parse xml and return result. 
     return ...; 
    } 
} 

[Test] 
public void TestParseXml() 
{ 
    // Get xml stream to test from somewhere. 
    Stream xmlStream = ...; 

    // Call method to test. 
    var result = new ClassToTest().ParseXml(xmlStream); 

    // Assert results. 
    Assert.IsNotNull(result); 
    ... 
} 

的想法是,你以某種方式爲您提供與您創建一個XML文件,測試類和你知道什麼解析結果的期望。

+0

我不想檢查文件的閱讀。我只想單元測試解析。模擬系統可以以某種方式幫助我? – 2010-06-13 07:37:28

+0

也許你可以提供一些你想測試的方法或類的代碼? – 2010-06-13 07:45:30

相關問題