1

この問題についてグーグル検索しましたが、答えが見つかりませんでした。

私のテスト実行は並行して実行されているように見え、お互いに失敗します。個別に実行すると、すべて合格します。テストにスレッドを追加してスリープ状態にしようとしましたが、うまくいきませんでした。

これらのテストを順番に実行する方法はありますか?

私の環境:

Visual Studio 2010 Resharper Jet 頭脳 6.1

4

1 に答える 1

11

決定論的な単体テストを用意することをお勧めします。つまり、実行される順序や、他のテストが前後に実行されることに依存しません。これを行わないことは、失敗の元です。ほとんどのテスト ランナーは、テスト メソッドが完全に独立しているという事実に基づいています。

この事実は、テスト クラスのメソッドが呼び出される方法で本質的に明らかです。たとえば、MS Test では、Assembly、Class、および Test の初期化メソッドを使用できます。これらはすべて、呼び出される TestMethod ごとに呼び出されます。たとえば、次のクラスを使用します。

   [TestClass()]
   public class DivideClassTest
   {
      [AssemblyInitialize()]
      public static void AssemblyInit(TestContext context)
      {
         Console.WriteLine("Assembly Init");
         }

      [ClassInitialize()]
      public static void ClassInit(TestContext context)
      {
         Console.WriteLine("ClassInit");
      }

      [TestInitialize()]
      public void Initialize()
      {
         Console.WriteLine("TestMethodInit");
      }

      [TestCleanup()]
      public void Cleanup()
      {
         Console.WriteLine("TestMethodCleanup");
      }

      [ClassCleanup()]
      public static void ClassCleanup()
      {
         Console.WriteLine("ClassCleanup");
      }

      [AssemblyCleanup()]
      public static void AssemblyCleanup()
      {
         Console.WriteLine("AssemblyCleanup");
      }

      [TestMethod()]
      public void Test1()
      {
          Console.WriteLine("Test1");
      }
      [TestMethod()]
      public void Test2()
      {
          Console.WriteLine("Test2");
      }
  } 

次のような出力が表示されます

Assembly Init
ClassInit
TestMethodInit
Test1
TestMethodCleanup
TestMethodInit
Test2
TestMethodCleanup
ClassCleanup
AssemblyCleanup

「Test」クラスはありますが、TestMethod 自体がテストと見なされます。「テスト」クラスは、効果的に多くのテストを持つことができます。

于 2012-12-21T18:08:15.080 に答える