如何使MiniTests按测试类的字母顺序运行测试?

时间:2016-01-07 15:25:02

标签: minitest ruby-on-rails-4.2

在MiniTest中,我知道我们可以使测试方法按字母顺序运行,但是测试类不可行。有没有什么方法可以让MiniTest按照测试类的字母顺序运行?

我知道测试类之间不应该有任何依赖关系,因为它不是一个好的方法,但是我们可以通过任何可能的方式实现这一点吗?

1 个答案:

答案 0 :(得分:1)

我们想出了解决方案,以防万一有人在寻找一个

看看以下主题:

https://github.com/seattlerb/minitest/issues/514

以下是线程的要点,以防链接断开:

  

正确。正如您在要点中看到的那样,测试方法仍按字母顺序运行,但测试类不是。

     

测试订单依赖项是测试中的错误,可能会导致生产代码中的错误。您应该认真考虑修复测试,以便每个测试都与订单无关。 100%成功的完全随机化应该是您的目标。如果您有很多测试,这可能是一项艰巨的任务,但https://github.com/seattlerb/minitest-bisect绝对有助于此。

     

如果您出于某种原因绝对100%死于保持测试订单依赖性(错误),那么您必须使用补丁Minitest .__ run。

添加一个类似于以下

的修补程序修补Minitest
module Minitest
  def self.__run reporter, options
    suites = Runnable.runnables
    parallel, other = suites.partition { |s| s.test_order == :parallel }
    random, sorted  = other.partition  { |s| s.test_order == :random }

    sorted.map { |suite| suite.run reporter, options } +
      random.shuffle.map   { |suite| suite.run reporter, options } +
      parallel.shuffle.map { |suite| suite.run reporter, options }
  end
end