2013-07-23 72 views
9

我有一個測試方法,它將兩個XML文件作爲輸入並進行比較。我在.NET 4.5上使用Microsoft.VisualStudio.TestTools.UnitTesting框架。我想修改測試方法,以便它能夠接收多個XML文件(每次兩個),運行測試並分別給出結果。使用數組在C#中進行數據驅動測試

我試過下面的代碼,但它只給出一個單一的輸出,並在任何一對輸入文件未通過測試時停止。

string[] source = {file1, file2, file3, file4....}; 
string[] target = {fileA, fileB, fileC, fileD....}; 

[Test Method] 
public void TestCase01() 
{ 
     TestLogic testObj = new TestLogic(); //class containing the comparison method 
     for (int i = 0; i < source.Length; i++) 
     { 
      Assert.IsTrue (testObj.VerifyFiles(source[i], target[i])); 
     } 
} 

在做一些研究,我發現,DataSource屬性都可以使用。但我不知道如何將兩個數組(或一個二維數組)傳遞給DataSource屬性。 我傾向於使用Microsoft.VisualStudio.TestTools.UnitTesting進行測試,並且僅將NUnit等其他第三方框架作爲最後的手段。

編輯: 我不知道輸入文件的數量。我僅以4個文件爲例。 在將文件傳遞給TestMethod之前,我使用它們的ID將它們配對。所以我首先從兩個不同的文件夾中讀取兩組文件,根據它們的ID將它們配對,然後將配對文件傳遞給測試用例進行測試。我現在的做法是將配對的文件名(源和目標)保存在數組或列表中,然後將它們傳遞給測試用例。顯然,這種方法不起作用,我正在經歷上面提到的問題。

回答

0

簡單地等同於可以工作Datasource instance = Array。 循環中的數據源行和數組實例中的行值。

+5

請您詳細說明一下嗎?也許給它一些演示代碼。 – Vijay

7

您可以使用一個csv文件作爲DataSource,該文件將包含兩列(一個用於源,另一個用於目標)。然後在您的測試使用如下:

[TestClass] 
public class TestCase 
{ 
    [TestMethod] 
    [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "files.csv", "files#csv", DataAccessMethod.Sequential)] 
    public void TestCase() 
    { 
     TestLogic testObj = new TestLogic(); 

     string source = (string) TestContext.DataRow["source"]; // get the value from the 'source' column 
     string target = (string) TestContext.DataRow["target"]; // get the value from the 'target' column 

     Assert.IsTrue(testObj.VerifyFiles(source, target)); 
    } 

    public TestContext TestContext{ get; set; } 
} 

測試將通過DataSource的行迭代,並且將運行一次的每一行。

檢查here瞭解更多詳情。

+1

只需確保將.csv文件簽入源... –

+0

因此,使用此方法,我將不得不從兩個文件夾中讀取文件,根據它們的ID將它們配對,然後將配對文件名保存在CSV文件中我通過測試案例閱讀。有沒有更直接的方法來做到這一點?就像直接將數組傳遞給DataSource一樣? – Vijay

+0

在你的問題中,你沒有提到任何關於配對的問題。他們似乎已經配對。只是字符串數組(我建議路徑),所以我的解決方案是將這些數組(配對路徑)放入一個scv中並從那裏讀取它們。這樣你就不需要複製測試用例,也不需要修改代碼就可以添加更多的配對路徑。如果您在測試中有額外的功能,請編輯您的問題。 – Schaliasos

2

我有一個類似的問題,在最後跟着從this blog post建議,

我們使用匿名類型的陣列來存儲我們的條件設定,然後使用LINQ的的ForEach()方法循環通過數組並運行每個元素的測試。

+0

這看起來與OP試圖避免的原始解決方案相同,例如, 「它只給出一個輸出並在任何一對輸入文件未通過測試時停止」 –

相關問題