【问题标题】:Control order in which ReSharper executes unit testsReSharper 执行单元测试的控制顺序
【发布时间】:2012-11-26 02:55:51
【问题描述】:

有没有办法告诉 ReSharper 在其他人之前在项目中执行某组测试?我仍然想要并行执行,我不需要按方法控制它,只需按类即可。测试框架是 MSTest,如果这有影响的话。

我想这样做的原因是一些测试在低级别工作并且非常快,但其他测试在更高级别工作并且慢得多。我希望首先运行快速测试,因为如果它们失败了,那么我就知道出了点问题,继续下去就没有意义了。但是,ReSharper 目前首先运行我的慢速测试。

编辑:我的测试不是按字母顺序运行的(VS 2010 上的 R# 7.1)。我每个班级都有一个源文件。类中的测试似乎按照方法在源代码中出现的顺序运行,但我无法弄清楚 R# 如何确定测试类的顺序。这就是我所追求的,因为慢速和快速测试在不同的课程中。这也不是按字母顺序排列的,但每次运行都是一致的。

编辑2:好的,想通了(见答案)。

【问题讨论】:

    标签: unit-testing resharper


    【解决方案1】:

    这看起来有点像 hack,但我发现如果我从项目中删除带有慢速测试的文件并重新添加它们,它们就会最后运行。因此,R# 似乎会跟踪包含测试类的源文件的添加顺序并按该顺序运行它们。 (编辑 .csproj 文件以重新排序文件没有效果,所以它似乎没有使用它。)

    【讨论】:

      【解决方案2】:

      我想这样做的原因是一些测试在低级别工作 并且非常快,但是其他测试在更高级别上工作并且很多 慢一点。

      我建议几种方法:

      将测试分成两个独立的项目。将“快速”测试放入

      YourProject.Test.Unit

      以及

      中的缓慢测试

      YourProject.Test.Integration

      集成测试通常是与其他组件(例如网络、数据库、文件系统等)交互的测试,这可能会导致测试运行速度变慢。可能是您较慢的测试正在访问外部资源(我们不知道)。

      或者使用@thersch 的建议使用类别来标记较慢的测试。我会使用 category 方法,因为您的测试实际上都是单元测试,因此拆分它们没有意义。

      【讨论】:

      • 谢谢。我不想分成两个项目,即使那样,我也不知道如何确保先运行更快的项目。
      【解决方案3】:

      似乎测试执行是按字母顺序以...的形式进行的。 所以你可以改变你的命名空间/类名来匹配测试顺序。但我想这不是你的选择。

      另一个选项是在“单元测试会话”窗口中将测试添加到不同的测试会话。将快速测试移至会话 #1,将慢速测试移至会话 #2。然后你只运行你需要的一个测试会话。

      不是一个选项是将 TestCategory 添加到您的测试方法(即:[TestCategory("Fast"), TestMethod][TestCategory("Slow"), TestMethod])并在 Unit Test Sessions 窗口中将您的测试分组em>类别。这对测试订单没有影响。

      【讨论】:

      • 谢谢,我可以更改命名空间和类名,但顺​​序对我来说不是字母顺序 - 请参阅编辑。测试会话的想法是一个很好的想法 (+1),尽管这是我每次打开不理想的解决方案时都需要做的事情。
      【解决方案4】:

      或者,您可以创建一个测试,以按照您想要的顺序编排对其他测试的调用 - 因此该测试本身充当“会话”。

      [TestMethod]
      public void A_RunAllTests()
      {
          Test1();
          Test2();
          .
          .
      
      }
      

      【讨论】:

      • 这不会显示测试失败的地方。如果双击失败的测试A_RunAllTests,它将转到Test1Test2,而不是实际的断言。
      【解决方案5】:

      在解决方案资源管理器中右键单击您的 UnitTest 项目 > 添加 > 有序测试..

      您无法从 Resharper 访问此有序测试,但它会显示在 VS 测试资源管理器中。将您订购的测试添加到特定的 VS 测试播放列表,并从您的 Resharper 会话/会话中删除涉及的测试。

      为了节省大量样板文件,我通常将这种技术与数据库添加 > 获取 > 编辑 > 删除测试一起使用,并使用带有 [ClassCleanup] 属性的清理方法来滑动测试插入的数据库,以防其中一个测试失败.

      【讨论】:

        猜你喜欢
        • 2012-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-23
        • 1970-01-01
        • 2011-05-04
        • 2010-12-01
        相关资源
        最近更新 更多