2011-06-02 46 views
3

編輯:我是NUnit的超級新手。每個數據庫行NUnit測試?

我不知道這是否可行,但我會繼續解釋我正在嘗試做什麼。

我想創建一個測試夾具,用來自數據庫的5種不同類型的輸入來運行測試。

TestFixture 
    Test using input1 
    Test using input2 
    Test using input3 
    Test using input4 
    Test using input5 

這樣一來,我可以從NUnit的GUI到底哪個輸入引起的故障看,但我不知道如何做到這一點。目前,我有一些設置是這樣的:

[TestFixture] 
public class Tester{ 
    [Test] 
    public void RunTest(){ 
     var inputs = db.inputs.where(a=>a.id < 6).ToList(); 
     bool testSuccess=true; 
     foreach(var input in inputs){ 
      bool success = RunTheTest(input); 
      if(success==false){ 
       testSuccess=false; 
      } 
     } 
     //Tell NUnit that the entire test failed because one input failed 
    } 
} 

在這種情況下,NUnit的,我看到:

Tester 
    RunTest 

而且即使runTest方法嘗試5倍不同的投入,我只知道,如果有一個或更多輸入失敗,但我不知道哪個輸入失敗。基本上我問的是,如果可以根據我想要從數據庫中獲取的任何內容來動態創建在NUnit GUI中顯示的測試。

回答

0

在foreach循環中你可以做
Assert.True(success, string.Format("Input: {0}", input));

或者,您可以嘗試ValueSourceAttribute,其中sourceType是一個輔助類,該輔助類具有返回名爲sourceName的IEnumerable的方法。這個方法的實現應該從DB獲取輸入值。

+0

每個斷言都會顯示爲GUI中的子測試? – sooprise 2011-06-02 21:36:39

+0

我認爲RunTest是一項測試,RunTheTest只是一個輔助方法。所以測試中的第一個斷言將會使整個測試失敗。在單元測試中,您不應該將多個測試作爲一個運行。 – softveda 2011-06-02 21:40:22

+0

第一個失敗的Assert將導致測試結束 – Pedro 2011-06-02 21:40:38

3

看看TestCaseSource屬性。這將允許您定義另一種方法,在運行時,它將爲源方法返回的每個項目創建測試用例。