编辑注意,问题288805类似,但是,我特别询问MSTest如何选择 默认 测试订单。请看这个问题的其余部分。感谢Eilon the link。
我正在研究传统的MSTest项目。 测试始终以相同的顺序运行。 订单不是字母,而是弹跳 两个* .cs TestMethod文件中的方法之间。
我没有改变遗产的物理顺序 码。我为了方便起见追加了“MSTest01” 到第一个测试的方法名称,“MSTest02”到 第二次测试的方法名称,等等。
令我惊讶的是,TestMethod的执行顺序 功能改变了; #3第一,#6秒,#5第三, 等等。
当我从中移除“MSTestnn”字符串时 TestMethod函数名称,它们的执行顺序 改回以前的订购,即, 第一个.cs文件中的一个测试,来自的两个测试 第二个.cs文件,第一个五个测试 .cs文件,等等。
似乎文件位置可能不是一个因素 而TestMethod函数名称 可能 是一个因素。
问题:有人能解释MSTest如何决定TestMethod函数的执行顺序吗?
答案 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说; - )
如何:创建有序测试
MSTest.exe命令行选项
http://msdn.microsoft.com/en-us/library/ms182489(v=vs.120).aspx
答案 2 :(得分:3)
至于VSTest执行顺序。以下是它在TestProject中的组织方式:
例如,项目中有3个cs文件。
然后执行测试的顺序是:
TestProject1.UnitTest1.TestMethod05
TestProject1.UnitTest1.TestMethod03
TestProject1.UnitTest3.TestMethod01
TestProject1.UnitTest2.TestMethod02
您可以看到默认订单'使用命令:
vstest.console.exe TestProject1.dll / ListTests
答案 3 :(得分:0)
在没有失败的测试之后,在MSTest中创建的测试按执行时间升序排列,因此是随机执行。除非方法名称按字母顺序排列。