你如何指定Minitest测试的确切顺序?

Ari*_*Ari 1 ruby testing ruby-on-rails testunit minitest

Minitest允许您通过覆盖test_order来按顺序运行测试alpha.(您也可以使用该i_suck_and_my_tests_are_order_dependent!方法.)

执行此操作后,如何控制跨多个文件运行测试的顺序?
有没有办法从一个文件运行一些测试,然后切换到另一个文件?

查看源代码,似乎应该能够控制方法的排序方式.但是你如何指定这个顺序呢?

knu*_*nut 5

i_suck_and_my_tests_are_order_dependent!(或def self.test_order; :alpha;end定义字母顺序.

除了字母顺序之外,只有一个随机顺序定义(至少在'minitest','> 5.5.1','<= 5.6.1'.

但你可以修补MiniTest::Test.runnable_methods以获得另一个订单.

gem 'minitest'
require 'minitest/autorun'

class MiniTest::Test
    #Add a test order :defined
    def self.runnable_methods
      methods = methods_matching(/^test_/)

      case self.test_order
      when :random, :parallel then
        max = methods.size
        methods.sort.sort_by { rand max }
      when :defined then  # <-new
        methods
      when :alpha, :sorted then
        methods.sort
      else
        raise "Unknown test_order: #{self.test_order.inspect}"
      end
    end
end

class TestOrder < MiniTest::Test
  def self.test_order; :defined; end

  #Alphabetic order
  #~ def self.test_order; :alpha;end
  #~ i_suck_and_my_tests_are_order_dependent!

  def test_4;    p __method__;  end
  def test_3;    p __method__;  end
  def test_2;    p __method__;  end
  def test_1;    p __method__;  end
end
Run Code Online (Sandbox Code Playgroud)

但是测试顺序仅针对每个Test-subclass定义,而不是针对所有测试的全局定义.因此,这不会让您访问多个测试类中的测试方法的顺序.

我估计你的文件中有不同的测试类,所以这与你的问题相对应.(不是文件是标准,而是Test-class.)

如果在测试文件中只定义一个Test类,则可以定义自己的订单.