7

私がやりたいことはこれです:

  1. 一連の単体テストを作成します。
  2. モック、入力変数などの初期化のさまざまな順列/組み合わせを作成します。
  3. いくつかのパラメーターに基づいて、そのような初期化のセットに対して、指定された各単体テストを実行します。

どうすればこのようなことをすることができますか?

これを処理するフレームワークは既にありますか (つまり、初期化を変更しながら特定のテストを複数回実行します)。これを行うために何かを作ることができるデザインやアイデアを提案できますか?

単体テスト フレームの動作を認識しています。私はNUnitとRhinoのモックを自分で使用しています。

以下に示すのは、私が必要とするものの例です。

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

[Test Method]
TestA()

今、私は TestA() を複数回実行したいと考えています。テストを初期化するたびに、別の初期化の組み合わせが選択されます。

より明確にする

テストで変数 A、B、C が必要であるとします。これらはそれぞれ非常に複雑なオブジェクトであり、最終的に多数の組み合わせが形成される可能性があります。だから私はどういうわけか、そのような組み合わせのリストを反復できるテスト初期化を作成できることを望んでいます.リストが不足しています。次に、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" );

}

DataSource を使用して 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
{
    [テスト]
    public void TestOne()
    {
        ...
    }

    [テスト]
    public void TestTwo()
    {
        ...
    }
}
[テストフィクスチャ]
パブリック クラス FirstSetup : MyTests
{
    [設定]
    public void Setup()
    {
        ...
    }
}

[テストフィクスチャ]
public class SecondSetup : MyTests
{
    [設定]
    public void Setup()
    {
        ...
    }
}

私は他の言語でこれを行いましたが、さまざまな C# フレームワークがそれをどのように処理するかはわかりません。

于 2012-11-21T17:30:21.770 に答える