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

时间:2010-02-12 21:36:37

标签: c# mstest

编辑注意,问题288805类似,但是,我特别询问MSTest如何选择 默认 测试订单。请看这个问题的其余部分。感谢Eilon the link

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

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

令我惊讶的是,TestMethod的执行顺序 功能改变了; #3第一,#6秒,#5第三, 等等。

当我从中移除“MSTestnn”字符串时 TestMethod函数名称,它们的执行顺序 改回以前的订购,即, 第一个.cs文件中的一个测试,来自的两个测试 第二个.cs文件,第一个五个测试 .cs文件,等等。

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

问题:有人能解释MSTest如何决定TestMethod函数的执行顺序吗?

4 个答案:

答案 0 :(得分:7)

我相信MSTest执行的测试方法是按照'ID'排序它们(似乎是它们的完整命名空间)。

我创建了一个包含4个未测试的TestProject1(UnitTest1,... 2,... A,... B)。每个单元测试包含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”列。

答案 1 :(得分:6)

MSDN说; - )

如何:创建有序测试

  

http://msdn.microsoft.com/en-us/library/ms182631.aspx

MSTest.exe命令行选项

  

http://msdn.microsoft.com/en-us/library/ms182489(v=vs.120).aspx

答案 2 :(得分:3)

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

  1. 按照CREATION Time ASC
  2. 对项目中的cs文件进行排序
  3. 每个文件中的方法位置
  4. 例如,项目中有3个cs文件。

    • UnitTest1.cs - 使用方法TestMethod05和TestMethod03创建于01/01/1970
    • 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

答案 3 :(得分:0)

在没有失败的测试之后,在MSTest中创建的测试按执行时间升序排列,因此是随机执行。除非方法名称按字母顺序排列。