2012-11-21 199 views
6

我想要做的是這樣的:Visual Studio C#單元測試 - 使用不同的/多個測試初始化​​運行單元測試,多次運行相同的單元測試?

  1. 創建一堆單元測試。
  2. 創建模擬初始化,輸入變量等各種不同的排列/組合
  3. 運行每個給定的單元測試,針對基於一些參數的一組這樣的初始化。

我該如何去做這樣的事情?

是否有任何框架來處理這個問題(即,在更改初始化的同時多次運行給定的測試)?你能提出任何設計或想法,我可以做些什麼來做到這一點?

我知道單元測試框架的作品。我自己使用NUnit和Rhino mock。

下面顯示的是我需要的一個例子。

[Test Initialize] 
Setup(<-possible parameter->) 

[Test Method] 
TestA() 

現在我想讓TestA()運行多次。每次Test初始化都會選擇另一個初始化組合。

更多澄清

允許假設一個測試將要求變量A,B,C的每個都是與最終結果是可以形成大量的組合的非常複雜的對象。所以我希望能以某種方式創建一個測試初始化​​,它可能會迭代這些組合的列表,所以它會初始化它們,運行TESTA,返回列表中的下一個初始化,再次運行TESTA等等,直到該列表用完了。接下來爲TESTB選擇另一個列表,並再次執行此過程。

至少希望某些能力能夠運行給定的測試函數n次。其餘的我知道我可以建立一旦這是可能的

+5

有很多框架可用...請在提問前做一些搜索 – emartel

+2

你明白我在問什麼嗎? 我知道有很多框架,我使用它們中的兩個或三個,我需要的是給定單元測試在初始化函數變化時反覆運行。 –

回答

3

您可能能夠做到這一點,而不需要任何框架特定的插件創建一個抽象的基類,其中包含所有的測試函數,然後繼承該基類與多個類,每個都有自己的設置功能。

 
public abstract class MyTests 
{ 
    [Test] 
    public void TestOne() 
    { 
     ... 
    } 

    [Test] 
    public void TestTwo() 
    { 
     ... 
    } 
} 
 
[TestFixture] 
public class FirstSetup : MyTests 
{ 
    [Setup] 
    public void Setup() 
    { 
     ... 
    } 
} 

[TestFixture] 
public class SecondSetup : MyTests 
{ 
    [Setup] 
    public void Setup() 
    { 
     ... 
    } 
} 

我在其他語言中做到了這一點,但不知道的各種C#框架將如何處理它。

+0

嗯在測試初始化​​組合的數量將阻止我使用這種方法,他們可以完全字面上指數或我希望的方式是,他們會從可能的初始化列表中選擇.. 我' m –

+0

那麼是的,這種方法可能不適合你。 –

+0

另一方面,我不得不爲3種不同的設置(3種不同的序列化器)運行相同的測試,這正是我所需要的。謝謝! –

7

在NUnit的,你可以使用[TestCase的]屬性的簡單類型:

[Test] 
[TestCase("a", "b")] 
[TestCase("c", "b")] 
[TestCase("a", "d")] 
public void TestMethod(string param1, string param2){ 
    // run your test with those parameters 
} 

或者你也可以使用複雜類型一個TestCaseSource方法:

[Test] 
[TestCaseSource("GetTestCases")] 
public void TestMethod(MyObject1 param1, MyObject2 param2){ 
    // run your test with those parameters 
} 

private IEnumerable GetTestCases(){ 
    yield return new TestCaseData(new MyObject1("first test args"), 
            new MyObject2("first test args")) 
         .SetName("SomeMeaningfulNameForThisTestCase"); 
    yield return new TestCaseData(new MyObject1("2nd test args"), 
            new MyObject2("2nd test args")) 
         .SetName("SomeMeaningfulNameForThisTestCase2"); 

} 

你可以在MS類似的東西 - 使用數據源的測試: http://codeclimber.net.nz/archive/2008/01/18/How-to-simulate-RowTest-with-MS-Test.aspx

+0

現在這看起來很有希望,我會試試:) –

相關問題