【问题标题】:how does MSTest determine the order in which to run test methods?MSTest 如何确定运行测试方法的顺序?
【发布时间】:2010-02-12 21:36:37
【问题描述】:

edit: 注意,问题 288805 类似,但是,我特意问的是 MSTest 如何选择 default 测试顺序。请看这个问题的其余部分。谢谢 Eilon the link

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

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

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

当我从 TestMethod 函数名称,它们的执行顺序 改回之前的顺序,即 来自第一个 .cs 文件的一个测试,来自第一个 .cs 文件的两个测试 第二个 .cs 文件,来自第一个的五个测试 .cs 文件等。

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

问题:谁能解释一下 MSTest 如何决定 TestMethod 函数的执行顺序?

【问题讨论】:

  • 通常你不应该关心单元测试的运行顺序。话虽如此,这是一个有趣的问题。
  • @ Mathias 我同意。我喜欢 xUnit.net 以随机顺序运行测试的方式。随机顺序是最好的选择,因为它可能会揭示不应该存在的顺序依赖关系。去特洛伊看我的 cmets。
  • ?奇怪的是,我到特洛伊的 cmets 似乎消失了,还有他的问题。
  • ademiller.com/blogs/tech/2007/11/… F.Y.I. “xUnit.net 以随机顺序运行测试”,Ade Miller

标签: c# mstest


【解决方案1】:

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

我创建了一个 TestProject1,它包含 4 个 unt 测试(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”列。

【讨论】:

【解决方案2】:

【讨论】:

    【解决方案3】:

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

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

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

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

    那么执行测试的顺序是这样的:

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

    您可以使用命令查看“默认顺序”:

    vstest.console.exe TestProject1.dll /ListTests

    【讨论】:

    • 有没有办法改变 vstest 中的默认顺序,其他的尝试弄乱文件创建时间(删除、重新创建)?
    • 您可以尝试使用播放列表。右键单击测试资源管理器中的测试方法 => 添加到播放列表 => 新建播放列表
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2010-09-22
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      相关资源
      最近更新 更多