Visual Studio C#unit testing – 使用各种/多个测试初始化​​运行unit testing,多次运行相同的unit testing?

我想要做的是:

  1. 创建一堆unit testing。
  2. 创建各种不同的模拟初始化/组合,输入变量等。
  3. 基于某些参数,针对一组此类初始化运行每个给定的unit testing。

我该怎么做这样的事情?

是否已经有任何框架来处理这个问题(即在更改初始化时多次运行给定的测试)? 你能否提出任何我可以做到这一点的设计或想法?

我知道unit testing框架的工作原理。 我自己使用NUnit和Rhino嘲笑。

下面显示的是我需要的一个例子。

[Test Initialize] Setup(  ) [Test Method] TestA() 

现在我希望TestA()多次运行。 每次Test initialize都会选择另一个初始化组合。

更多澄清

让我们假设测试需要变量A,B,C。它们中的每一个都是非常复杂的对象,最终结果是可以形成大量的组合。 所以我希望以某种方式我可以创建一个测试初始化​​,可以迭代这样的组合列表,所以它会初始化它们,运行TESTA,返回列表中的下一个初始化,再次运行TESTA等等,直到列表用完了。 接下来,它为TESTB选择另一个列表,然后再次执行此过程。

至少我希望有一些能力能够运行给定的TESTfunctionn次。 其余的我知道一旦这是可能的,我可以建立

在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" ); } 

您可以使用DataSource在MS-Test中执行类似的操作: http : //codeclimber.net.nz/archive/2008/01/18/How-to-simulate-RowTest-with-MS-Test.aspx

您可以通过创建包含所有测试函数的抽象基类,然后使用多个类inheritance该基类,每个类都有自己的设置函数,而无需任何特定于框架的插件。

公共抽象类MyTests
 {
     [测试]
     public void TestOne()
     {
         ...
     }

     [测试]
     public void TestTwo()
     {
         ...
     }
 }
 [的TestFixture]
公共类FirstSetup:MyTests
 {
     [建立]
     public void Setup()
     {
         ...
     }
 }

 [的TestFixture]
公共类SecondSetup:MyTests
 {
     [建立]
     public void Setup()
     {
         ...
     }
 }

我用其他语言完成了这个,但不确定各种C#框架将如何处理它。