0

プロジェクトでいくつかの統合テストを実行したいと思います。今、私はすべてのテストが始まる前にいくつかのコードを実行し、すべてのテストが終了した後にいくつかのコードを実行できるメカニズムを探しています。

テストごとにメソッドを設定してメソッドを破棄することはできますが、すべてのテストに同じ機能が必要であることに注意してください。

Visual Studio、C#、NUnitを使用していることに注意してください。

4

1 に答える 1

1

NUnit.Framework.TestFixture属性を使用してテストクラスに注釈を付け、NUnit.Framework.TestFixtureSetUpおよびNUnit.Framework.TestFixtureTearDownを使用してすべてのテストセットアップおよびすべてのテスト分解メソッドに注釈を付けます。

これらの属性はSetUpやTearDownのように機能しますが、すべてのテストの前後ではなく、フィクスチャごとに1回だけメソッドを実行します。

コメントに応じて編集する:すべてのテストが終了した後にメソッドを実行するには、次のことを考慮してください(最もクリーンではありませんが、より良い方法がわかりません)。

internal static class ListOfIntegrationTests {
    // finds all integration tests
    public static readonly IList<Type> IntegrationTestTypes = typeof(MyBaseIntegrationTest).Assembly
        .GetTypes()
        .Where(t => !t.IsAbstract && t.IsSubclassOf(typeof(MyBaseIntegrationTest)))
        .ToList()
        .AsReadOnly();

    // keeps all tests that haven't run yet
    public static readonly IList<Type> TestsThatHaventRunYet = IntegrationTestTypes.ToList();
}

// all relevant tests extend this class
[TestFixture]
public abstract class MyBaseIntegrationTest {
    [TestFixtureSetUp]
    public void TestFixtureSetUp() { }

    [TestFixtureTearDown]
    public void TestFixtureTearDown() {
        ListOfIntegrationTests.TestsThatHaventRunYet.Remove(this.GetType());
        if (ListOfIntegrationTests.TestsThatHaventRunYet.Count == 0) {
            // do your cleanup logic here
        }
    }
}
于 2012-10-03T12:57:45.653 に答える