Visual studio 2010 MSTest:同一TestClass中测试的执行顺序

Visual studio 2010 MSTest:同一TestClass中测试的执行顺序,visual-studio-2010,mstest,Visual Studio 2010,Mstest,在使用MSTest执行测试时,我需要强制执行TestClass顺序 TestClass和每个类中的测试的顺序可以是随机的,但是MSTest不应该从另一个TestClass中选择一个测试,直到它执行完ClassInitialize、类中的所有测试和ClassCleanup 我有全局AssemblyInitialize和AssemblyCleanup,因此以下操作不起作用,因为它为每个测试初始化程序集: MSTest.exe /testcontainer:MyUnitTests.dll /resu

在使用MSTest执行测试时,我需要强制执行
TestClass
顺序

TestClass
和每个类中的测试的顺序可以是随机的,但是MSTest不应该从另一个
TestClass
中选择一个测试,直到它执行完
ClassInitialize
、类中的所有测试和
ClassCleanup

我有全局
AssemblyInitialize
AssemblyCleanup
,因此以下操作不起作用,因为它为每个测试初始化程序集:


MSTest.exe /testcontainer:MyUnitTests.dll /resultsfile:report.trx /test:TestClass1 /test:TestClass2

我问了一个类似的问题,尽管这不是关于测试类的执行顺序。如果排序的原因是为了能够设置/维护某种状态,则排序测试可能会导致它们变得脆弱。如果您的测试是这样的,我建议您用一种顺序不可知的方式来编写它们

关于程序集级代码的问题,
AssemblyInitialize
AssemblyCleanup
的解决方法如下:

private int InitCount;

[AssemblyInitialize]
public static void Setup(TestContext context)
{
     if (InitCount++ == 0) {
         //Do Something
     }
}

[AssemblyCleanup]
public static void Teardown()
{
      if (--InitCount == 0) {
          //Do something
      }
}

基本上,您只能强制程序集级方法启动一次。

我问了一个类似的问题,尽管这不是关于测试类的执行顺序。如果排序的原因是为了能够设置/维护某种状态,则排序测试可能会导致它们变得脆弱。如果您的测试是这样的,我建议您用一种顺序不可知的方式来编写它们

关于程序集级代码的问题,
AssemblyInitialize
AssemblyCleanup
的解决方法如下:

private int InitCount;

[AssemblyInitialize]
public static void Setup(TestContext context)
{
     if (InitCount++ == 0) {
         //Do Something
     }
}

[AssemblyCleanup]
public static void Teardown()
{
      if (--InitCount == 0) {
          //Do something
      }
}

基本上,您只能强制程序集级方法触发一次。

谢谢您的回复。这将不起作用,原因有二:1。每次加载程序集时,它将获得自己的InitCount,并在每次/执行代码2时对其进行初始化。AssemblyCleanup应在执行最后一个测试后执行一次感谢您的回复。这将不起作用,原因有二:1。每次加载程序集时,它将获得自己的InitCount,并在每次/执行代码2时对其进行初始化。AssemblyCleanup应在执行最后一个测试后执行一次