2010-06-30 80 views
1

尤其是對於C#單元測試,如何進行測試運行各種輸入或輸入矩陣?單元測試各種各樣foreach的一些輸入

我經常會遇到單元測試會產生輸入矩陣的情況,但通常可以通過檢查輸入列表來合理解決這個問題。

最簡單的情況下,測試加成

  • 0 + 0 = 0
  • 1 + 0 = 1
  • 0 + -1 = -1
  • 1 + -1 = 0

對每個輸入都會進行相同的測試(在這個例子中有4個輸入,每個輸入都與某些經驗相關輸出。

簡單的解決方案是:

object[] inputs = ... 
foreach (var input in inputs) 
    // Put Assert here 

但問題是,當你運行你的測試不會告訴爲其輸入失敗,除非你在郵件日誌足夠的細節手動

另一種解決方案是展開循環(如下所示)。堆棧跟蹤然後給出哪個輸入失敗,並且這允許再次對單個輸入運行測試。

TestAddition(0, 0, 0); 
TestAddition(1, 0, 1); 
TestAddition(0, -1, -1); 
TestAddition(1, -1, 0); 

最後但並非最不重要的,就像FitNess解決方案,這似乎有助於這種情況下,還增添了不少複雜的,似乎沒有適應好了標準C#開發。

所有這些解決方案都不適用於燈具,因爲所有輸入都會調用[TestInitialize]一次。

你的解決方案是什麼?

是否有一些功能我不知道可以幫助這些情況?

回答

2

它的可能性。您缺少的術語是「數據驅動測試」 /參數化測試。試用一個搜索引擎,你應該爲你的特定測試框架找到不少答案。

大多數xUnit測試框架都具有啓用此功能的機制。正如Martin發佈的,NUnit使用RowTest/TestCase屬性將參數傳遞給測試。

+0

看看這是否有幫助 - 標籤:'無恥的博客插件':) http://madcoderspeak.blogspot.com/2009/01/nunit-rowtest-extension-running-same.html – Gishu 2010-06-30 14:45:31

+0

感謝那些keyworks。有了它,我發現http://www.c-sharpcorner.com/UploadFile/sanks/1770/Default.aspx這似乎接近我正在尋找(看起來有點複雜)。搜索... – Wernight 2010-06-30 14:57:12

5

如果你使用NUnit,你應該看看TestCase屬性。

[TestCase(0,0,0)] 
[TestCase(1,0,1)] 
[TestCase(0,-1,-1)] 
[TestCase(1,-1, 0)] 
public void AdditionTest(int x, int y, int z) 
{ 
    Assert.AreEqual(z, x+y); 
} 
+0

其實我正在使用Visual Studio單元測試框架(內置單元測試)。從來沒有任何問題或理由改變到目前爲止。 – Wernight 2010-06-30 14:49:09

+0

http://codeclimber.net.nz/archive/2008/01/18/How-to-simulate-RowTest-with-MS-Test.aspx here found http://stackoverflow.com/questions/347535/how- to-rowtest-with-mstest提示了一種方法。雖然對我來說似乎有點沉重。 – 2010-06-30 15:00:02

1

看一看Pex。在決定值得下載之前,您可以try it online

+0

我認爲這對OP的要求來說有些過於先進; Pex如果我沒有弄錯是'掃描並生成單元測試'工具 – Gishu 2010-06-30 14:43:08

+0

它更先進。使用Pex,操作員甚至不必爲他的測試用例寫入數據。 – 2010-06-30 14:58:47