2013-03-11 68 views
2

如何參數化C#單元測試,以便代替一系列類似的assert語句,測試將遍歷參數列表(包括預期值),並將結果與​​期望值進行比較值?C#單元測試:遍歷預期結果列表

使用案例:

  • 這個特別的單元測試需要檢查一個XML文件,並辦理XML元素名稱列表,驗證文檔中包含這些元素和它們的值相匹配的期望是什麼
該測試方法的

斷言部分包括一系列的斷言這樣的:

var width = output.Element(namespace + "width"); 
Assert.IsNotNull(width); 
Assert.AreEqual(width.Value, "600"); 

我想avoi d冗餘代碼,並用不同的值迭代相同的代碼。我如何定義一個數據結構來遍歷斷言檢查?

所需的數據結構是元組列表(在這種情況下包含元素的類型(XName,字符串))。如何在C#中表達這一點?是否有一些標準的單元測試工具可以在這裏提供幫助?

的更多信息:

  • 使用Visual Studio單元測試框架(Microsoft.VisualStudio.TestTools.UnitTesting)和.Net 3.5
  • 需要與用例本身運行各種參數值,只是它的斷言部分(上面引用的代碼)
+0

你使用什麼單元測試庫? – 2013-03-11 16:49:14

+1

針對該問題添加了單元測試框架。這是Visual Studio測試框架。 – CaptSolo 2013-03-11 16:54:10

+1

更新了問題:添加了用例描述;添加信息.Net 3.5。 - 似乎在.Net 4.0中,答案將是使用元組列表並遍歷它。 – CaptSolo 2013-03-11 17:35:09

回答

2

Nunit有一些稱爲TestCases的東西,您可以通過屬性訪問它。這聽起來像你所要求的:

http://nunit.org/?p=testCase&r=2.5

UPDATE:

這個答案前的問題更新指定框架提供使用

UPDATE

這個問題看起來也有相關性:MS Test Equivalent(或缺少)

Does MSTest have an equivalent to NUnit's TestCase?

+0

似乎有一些支持MSTest中的數據驅動測試,我已經提到了一些證明這一點的資源。 – 2013-03-11 16:59:06

+1

我需要在調用要測試的方法之後,通過斷言檢查代碼的一個片段進行迭代。如果整個測試用例需要重新運行,TestCase屬性將會很有幫助,但在這種情況下不會。 – CaptSolo 2013-03-11 16:59:10

+1

感謝您的答案。我在原始問題中添加了一個解釋,說明只有斷言部分需要迭代 - 如果您有關於如何進一步澄清問題的建議,請讓我知道 – CaptSolo 2013-03-11 17:27:54

0

既然你說你正在使用MSTEST,這裏有幾個資源從MSDNindependent blog使用微軟的單元測試框架,說明驅動的測試數據。

總之,您需要在TestMethod中指定DataSource屬性並將其指向數據源。它可以是CSV或SQL Server CE。

1

好像你只需要解壓的方法,以滿足您的要求的字面需要:

public void AssertElementExistsWithValue(XmlElement parent, string nameSpace, string childName, string value) 
{ 
    var child = parent.Element(namespace + childName); 
    Assert.IsNotNull(child); 
    Assert.AreEqual(child.Value, "600");  
} 

我通常使用LINQ的XML類,所以我道歉,如果我有一個編譯錯誤。我敢肯定,你會得到主意。

當我測試xml格式時,我通常會寫兩個測試。首先是往返測試:將實體寫入xml,讀回來,斷言它們是相同的。這是一個很好的面向價值的測試,如果您更改元素的名稱,它不會中斷。

我寫的第二個測試是精確定位XML格式的測試。我從正確格式化的對象中獲取xml,並將其用作測試中的常量,並聲明創建了正確的對象。此測試因實現細節原因而失敗,但沒關係。如果我打破了與數據格式的向後兼容性,它就會迫使我注意。

+1

謝謝 - 將斷言代碼提取到另一個函數使解決方案更加明確。 - 但它並沒有解決如何定義元素名稱列表和期望值迭代的主要問題。通過定義一個Dictionary 並修改AssertElements *函數來遍歷這個字典來解決這個問題。 – CaptSolo 2013-03-17 08:02:24