7

我想做的是:

  1. 创建一堆单元测试。
  2. 创建模拟、输入变量等初始化的各种不同排列/组合。
  3. 使用基于某些参数的一组此类初始化运行每个给定的单元测试。

我将如何去做这样的事情?

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

我知道单元测试框架的工作原理。我使用 NUnit 和 Rhino 模拟自己。

下面显示的是我需要的示例。

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

[Test Method]
TestA()

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

更多说明

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

至少我希望能够运行给定的 TEST 函数 n 次。其余的我知道我可以建造

4

2 回答 2

8

在 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-Test 中执行类似操作:http: //codeclimber.net.nz/archive/2008/01/18/How-to-simulate-RowTest-with-MS-Test.aspx

于 2012-11-21T18:27:57.833 回答
3

通过创建一个包含所有测试函数的抽象基类,然后用多个类继承该基类,每个类都有自己的设置函数,您也许可以在不需要任何特定于框架的插件的情况下做到这一点。

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

    [测试]
    公共无效TestTwo()
    {
        ...
    }
}
[测试夹具]
公共类 FirstSetup : MyTests
{
    [设置]
    公共无效设置()
    {
        ...
    }
}

[测试夹具]
公共类 SecondSetup : MyTests
{
    [设置]
    公共无效设置()
    {
        ...
    }
}

我已经用其他语言做到了这一点,但不确定各种 C# 框架将如何处理它。

于 2012-11-21T17:30:21.770 回答