如何有效地强制Minitest按顺序运行我的测试?

T-L*_*-Lo 7 ruby minitest

我知道.这是不鼓励的.由于我不会进入的原因,我需要按照它们编写的顺序运行我的测试.根据文档,如果我的测试类(我们称之为TestClass)扩展Minitest :: Unit :: TestCase,那么我应该能够调用公共方法i_suck_and_my_tests_are_order_dependent!(Gee - 你认为创建Minitest的人有意见吗?在那一个?).此外,还可以选择调用被调用的方法test_order并指定:alpha覆盖其默认行为:random.这些都不适合我.

这是一个例子:

class TestClass < Minitest::Unit::TestCase

  #override random test run ordering
  i_suck_and_my_tests_are_order_dependent!

  def setup
    ...setup code
  end

  def teardown
    ...teardown code
  end

  def test_1
    test_1 code....
    assert(stuff to assert here, etc...)
    puts 'test_1'
  end

  def test_2
    test_2_code
    assert(stuff to assert here, etc...)
    puts 'test_2'
  end

end
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到:

undefined method `i_suck_and_my_tests_are_order_dependent!' for TestClass:Class (NoMethodError)
Run Code Online (Sandbox Code Playgroud)

如果我用i_suck顶部的方法替换方法调用a la:

def test_order
  :alpha
end
Run Code Online (Sandbox Code Playgroud)

我的测试运行,但我可以从puts每个方法告诉我每次运行测试时事物仍以随机顺序运行.

有谁知道我做错了什么?谢谢.

小智 5

如果您只是将 test_order: alpha 添加到您的测试类,测试将按顺序运行:

class TestHomePage

def self.test_order
 :alpha
end

def test_a
 puts "a"
end

def test_b
 puts "b"
end

end 
Run Code Online (Sandbox Code Playgroud)


Jef*_*key 5

请注意,从minitest5.10.1 开始,i_suck_and_my_tests_are_order_dependent!方法/指令在使用语法的测试套件中完全MiniTest::Spec不起作用。该Minitest.test_order方法显然根本没有被调用。

编辑:自 Minitest 5.3.4 以来,这一直是一个已知问题:请参阅Seatlerb/minitest#514了解详细的哭声和整理。

你我都不是“烂”的人。我们需要的是一个用于 Ruby 的 BDD 规范工具,没有 RSpec 的臃肿也没有兄弟会态度和对 MiniTest 更广泛社区实践的蔑视。有人有任何指点吗?


Set*_*Bro 3

i_suck_and_my_tests_are_order_dependent!可能是后来添加到 minitest 中的,并且不能作为 Ruby 核心方法使用。在这种情况下,您需要强制使用您的 gem 版本:

require 'rubygems'
gem 'minitest'
Run Code Online (Sandbox Code Playgroud)