11

TeamTest に「MyClassTest」という単体テスト プロジェクトがあります。このプロジェクトには 3 つの TestMethods があります。各メソッドには、独自のテスト初期化手順が必要です。しかし、TestInitializeAttributeを 3 つの初期化メソッドに適用すると、属性を複数回使用してはならないというメッセージが表示されます。では、Visual Studio Team Test で各テスト メソッドを初期化するために使用する属性は何でしょうか?

参照:

  1. VS チーム テスト: データ ソースとして Excel を使用した .Net 単体テスト: アダプターの失敗

  2. Visual Studio テスト プロジェクトのスタートアップ スクリプトとクリーンアップ スクリプトを作成する方法は?

  3. カスタム カウンターを使用した VS 2010 負荷テストの結果

  4. 単体テストのエントリをログに記録して MSTest に残す方法

  5. 単体テスト プロジェクトは、ターゲット アプリケーションの app.config ファイルを読み込むことができますか?

4

5 に答える 5

24

MSDNによるとTestInitializeAttribute

  • 複数回使用することはできません ( AllowMultiple = false )。
  • を継承して独自の を作成することはできませんTestInitializeAttribute

TestInitializeしたがって、私の提案は、属性なしで Test Initialize Methods を作成することです。TestInitialize次に、現在実行されている一意のメソッドをチェックしTestMethod、適切な初期化メソッドを呼び出します。

[TestClass]
public class UnitTest
{
    public TestContext TestContext { get; set; }

    [TestInitialize]
    public void Initialize()
    {
        switch (TestContext.TestName)
        {
            case "TestMethod1":
                this.IntializeTestMethod1();
                break;
            case "TestMethod2":
                this.IntializeTestMethod2();
                break;
            default:
                break;
        }
    }

    [TestMethod]
    public void TestMethod1()
    {
    }

    [TestMethod]
    public void TestMethod2()
    {
    }

    public void IntializeTestMethod1()
    {
        //Initialize Test Method 1
    }

    public void IntializeTestMethod2()
    {
        //Initialize Test Method 2
    }
}
于 2012-05-22T10:33:57.080 に答える
12

3つのテストメソッドがあり、各メソッドに独自の初期化ステップがある場合、すべてのテストの前に実行されるメソッドに初期化を移動するのはなぜですか?私が見る唯一の利点は、ソースファイルにいくつかの行を追加するその素晴らしいスイッチブロックです。ただし、欠点があります。これらのテストメソッドのいずれかを見ると、どのコンテキストメソッドが実行されるかを実際に判断することはできません。そのため、初期化メソッドを使用して、フィクスチャのすべてのテストで実際に使用される基本的なコンテキストのみを設定します。

コンテキスト作成をarrange各メソッドの一部に移動するだけです。

共通のコンテキストを使用する複数のメソッドがある場合は、メソッドを抽出するだけで、それらのコンテキストがセットアップされ、arrangeパーツで呼び出されます。また、各コンテキスト設定をいくつかのステップに分割し、それらのステップを再利用することもできます(SpecflowなどのGiven-When-Thenツールで行われるように)。

そしてもちろん、さまざまな器具を作成することもできます。

于 2012-05-22T12:35:39.643 に答える
3

3 つの個別の初期化が必要な場合。その場合、おそらくそれぞれが独自の init を持つ 3 つの個別のフィクスチャにあるはずです!

于 2012-05-22T10:26:19.333 に答える