2010-02-12 79 views
14

编辑:笔记,问题288805是相似的,但是,我专门问我怎么做MSTest的选择默认测试顺序。请看这个问题的其余部分。谢谢Eilon的the linkMSTest如何确定运行测试方法的顺序?

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

我没有更改旧版 代码的物理顺序。为了方便起见,我在第一次测试的方法名称上追加了“MSTest01” ,第二次测试的方法名称为“MSTest02”, 方法名称等。

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

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

看来,文件的位置可能不是一个因素 而TestMethod的函数名可能是一个因素。

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

+4

通常,您不应该关心单元测试运行的顺序。这就是说,这是一个有趣的问题。 – Mathias 2010-02-12 21:49:56

+1

@ Mathias 我同意。我喜欢xUnit.net以随机顺序运行测试的方式。随机顺序是最好的选择,因为它可能会揭示不应该存在的顺序依赖关系。看看我对特洛伊的评论。 – gerryLowry 2010-02-12 22:16:26

+0

?奇怪的是,我对特洛伊的评论似乎已经消失,连同他的问题。 F.Y.I. – gerryLowry 2010-02-15 15:26:29

回答

6

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

我创建了一个TestProject1,它包含4个未测试(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的。例如,如果我将TestTest1的TestMethodB重命名为TestMethod4,它将在TestMethodA之前执行。

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

+3

未指定此行为,它可以在没有通知的情况下更改。 – 2014-08-11 08:14:53

+0

您是如何获得MSTest输出实际执行订单的?我正试图在这里实现相同:https://stackoverflow.com/questions/48379363/how-to-output-the-execution-order-of-unit-tests-in-visual-studio-2017 – philreed 2018-01-22 11:06:28

2

至于VSTest执行顺序。下面是它是如何在你的TestProject组织:

  1. 排序CS-文件在您的项目通过其创建时间ASC
  2. 在每个文件

例如

  • 方式的位置,你必须在3个CS文件项目。

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

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

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

    您可以看到使用命令 '默认顺序':

    vstest.console.exe TestProject1.dll/ListTests

  • +0

    有没有办法在vstest中更改默认顺序,其他尝试混淆文件创建时间(删除,重新创建)? – Razkar 2017-12-07 21:34:28

    +0

    您可以尝试使用播放列表。右键单击Test Explorer中的Test方法=>添加到播放列表=>新建播放列表 – 2017-12-08 09:34:41

    相关问题