MSTest如何确定运行测试方法的顺序?

编辑:注意,问题288805是类似的,但是,我特别询问MSTest如何选择默认测试顺序。 请看这个问题的其余部分。 谢谢Eilon 的链接 。

我正在寻找遗留的MSTest项目。 测试始终以相同的顺序运行。 订单不是字母顺序,而是在两个* .cs TestMethod文件中的方法之间反弹。

我没有改变遗留代码的物理顺序。 为方便起见,我为第一个测试的方法名称添加了“MSTest01”,将第二个测试的方法名称“MSTest02”添加到了等等。

令我惊讶的是,TestMethod函数的执行顺序发生了变化; #3第一,#6第二,#5第三,等等。

当我从TestMethod函数名中删除“MSTestnn”字符串时,它们的执行顺序变回了先前的顺序,即第一个.cs文件中的一个测试,第二个.cs文件中的两个测试,第一个中的五个测试。 cs文件,等等。

似乎文件位置可能不是一个因素,而TestMethod函数名称可能是一个因素。

问题:任何人都可以解释MSTest如何决定TestMethod函数的执行顺序?

我相信MSTest执行测试方法,通过它们的’ID’来命令它们(似乎是它们的完整命名空间)。

我创建了一个包含4个未测试的TestProject1(UnitTest1,… 2,… A,… B)。 每个unit testing包含5种测试方法(TestMethodA,… B,… 1,… 2,… 3)。 它们在测试类中以随机顺序声明。 现在,每次运行MSTest时,测试都以相同的顺序执行:

TestProject1.UnitTest1.TestMethod1 TestProject1.UnitTest1.TestMethod2 TestProject1.UnitTest1.TestMethod3 TestProject1.UnitTest1.TestMethodA TestProject1.UnitTest1.TestMethodB TestProject1.UnitTest2.TestMethod1 TestProject1.UnitTest2.TestMethod2 TestProject1.UnitTest2.TestMethod3 TestProject1.UnitTest2.TestMethodA TestProject1.UnitTest2.TestMethodB TestProject1.UnitTestA.TestMethod1 TestProject1.UnitTestA.TestMethod2 TestProject1.UnitTestA.TestMethod3 TestProject1.UnitTestA.TestMethodA TestProject1.UnitTestA.TestMethodB TestProject1.UnitTestB.TestMethod1 TestProject1.UnitTestB.TestMethod2 TestProject1.UnitTestB.TestMethod3 TestProject1.UnitTestB.TestMethodA TestProject1.UnitTestB.TestMethodB 

更改该顺序的唯一方法是重命名一个TestClass或TestMethod。 例如,如果我将UnitTest1的TestMethodB重命名为TestMethod4,它将在TestMethodA之前执行。

要查看测试方法的ID,请从VS打开“测试视图”窗口,然后右键单击列标题(例如测试名称) – >“添加/删除列…”并添加“ID”列。

至于VSTest执行顺序。 以下是它在TestProject中的组织方式:

  1. 通过CREATION Time ASC对项目中的cs文件进行排序
  2. 方法在每个文件中的位置

例如,项目中有3个cs文件。

  • UnitTest1.cs – 使用方法TestMethod05和TestMethod03创建于1970年1月1日
  • UnitTest2.cs – 使用方法TestMethod02创建于05/01/1970。
  • UnitTest3.cs – 使用方法TestMethod01创建于03/01/1970。

然后执行测试的顺序是这样的:

  TestProject1.UnitTest1.TestMethod05 TestProject1.UnitTest1.TestMethod03 TestProject1.UnitTest3.TestMethod01 TestProject1.UnitTest2.TestMethod02 

您可以使用命令查看“默认订单”:

vstest.console.exe TestProject1.dll / ListTests