测试用例按顺序而不是并行运行

时间:2012-12-21 18:05:21

标签: c# visual-studio-2010 tdd resharper-6.1

我搜索了这个问题,但找不到答案。

我的测试运行似乎并行运行并导致彼此失败。单独运行时,它们都会通过。我试图在测试中添加线程并让它们进入睡眠但没有运气。

有没有办法按顺序依次运行这些测试?

我的环境:

Visual Studio 2010 Resharper Jet大脑6.1

1 个答案:

答案 0 :(得分: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本身被认为是测试。 “测试”类可以有效地进行许多测试。