私は、MSTest(100+サブシステム)でかなりの数の統合テストを行っています。また、関連するテストを独自のテストクラスにグループ分けして読みやすくしたいテストグループには異なる構成設定が必要です。MSTestのテストクラス間でサービスを共有する
テストはもともと、特定のサービスの静的インスタンスを含む1つの大きなテストクラスから開始されました。これらのサービスは、スピンアップするまでに時間がかかり、テストが実行されるたびにテスト実行時間が支配的になります。元のテストコードはこのように始まりました。
[TestClass]
public class IntegrationTests
{
static ServiceA serviceA = new ServiceA();
static ServiceB serviceB = new ServiceB();
[ClassInitialize]
public static void ClassInit(TestContext context)
{
/* Gets the services up and going */
}
[TestInitialize]
public void TestInit()
{
/* Gets services back into good states */
}
/* Lots and lots of Integration tests */
[ClassCleanup]
public static void ClassCleanup()
{
/* Tear down the services */
}
}
この問題は、異なるテストグループがテストを実行する前にサービスを別の状態にする必要があることです。
[TestClass]
public class TestClassA : IntegrationTests
{
/* tests */
}
[TestClass]
public class TestClassB : IntegrationTests
{
/* tests */
}
[TestClass]
public class TestClassC : IntegrationTests
{
/* tests */
}
問題と:
私の最初のアイデアは、共通のベーステストクラスで静的なサービスを維持し、このような各試験群のための基本クラスから継承する新しいテストクラスを作成することでしたつまり、サービスは各テストクラスごとにスピンアップされ、解体されます。確かに、個々のテストごとに作成され破壊されるほど悪くはありませんが、テスト実行ごとに1回作成したいと思います。
MSTestの統合テストで同じサービスを共有する別々のテストクラスを用意する方法はありますか?
いつものように、私は他の誰かがする前に私自身の質問に答えることができました。解決策はこれに非常に似ていました。私のテスト基底クラスの中で、すべての初期化コードを処理する静的コンストラクタを作った。この方法も同様に機能します。 – CHendrix