我知道。这是不鼓励的。由于我不会进入的原因,我需要按照他们编写的顺序运行我的测试。根据文档,如果我的测试类(我们称之为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
当我跑步时,我得到:
undefined method `i_suck_and_my_tests_are_order_dependent!' for TestClass:Class (NoMethodError)
如果我使用顶部的方法替换i_suck
方法调用la:
def test_order
:alpha
end
我的测试运行,但我可以从每个方法的puts
告诉我每次运行测试时事物仍以随机顺序运行。
有谁知道我做错了什么? 感谢。
答案 0 :(得分:4)
如果您只是将test_order:alpha添加到测试类中,测试将按顺序运行:
class TestHomePage
def self.test_order
:alpha
end
def test_a
puts "a"
end
def test_b
puts "b"
end
end
答案 1 :(得分:3)
i_suck_and_my_tests_are_order_dependent!
可能是minitest&amp; amp;不适用于Ruby核心方法。在这种情况下,您需要强制使用您的宝石版本:
require 'rubygems'
gem 'minitest'
答案 2 :(得分:2)
我认为方法* test_order *应该是一个类方法而不是像这样的实例方法:
# tests are order dependent
def self.test_order
:alpha
end
答案 3 :(得分:1)
请注意,从i_suck_and_my_tests_are_order_dependent!
5.10.1开始,MiniTest::Spec
方法/指令在使用Minitest.test_order
语法的测试套件中完全无法正常运行。 % bytes_int(+ByteList, -IntegerRepresentation)
% converts a list of bytes to integer representation
% I accounts for bitshifting
bytes_int(BytesList, _) :-
bytes_int(BytesList, 0, 0).
bytes_int([], _, Num) :-
format('~w', Num).
bytes_int([B|Bs], I, Num) :-
B0 is B << I,
Num0 is B0 + Num,
I0 is I + 8,
bytes_int(Bs, I0, Num0).
方法显然根本没有被调用。
编辑:自从Minitest 5.3.4以来,这是一个众所周知的问题:请参阅seattlerb/minitest#514了解惨叫和整理。
你和我不是那些&#34;吮吸&#34;。所需要的是Ruby的BDD规范工具,没有RSpec 和的膨胀,没有兄弟会的态度和对MiniTest更广泛的社区实践的蔑视。有没有人有任何指示?
答案 4 :(得分:0)
干扰此链的最佳方法可能是覆盖类方法runnable_methods:
def self.runnable_methods
['run_first'] | super | ['run_last']
end
#Minitest version:
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 :alpha, :sorted then
methods.sort
else
raise "Unknown test_order: #{self.test_order.inspect}"
end
end
您可以通过任何合适的方式对测试进行重新排序。如果使用
定义特殊的有序测试test 'some special ordered test' do
end
,不要忘记将它们从超级电话的结果中删除。
在我的示例中,我需要确保只在一个特定的测试中运行最后一次,所以我保持整个套件的随机顺序并放置&#39; run_last&#39;在它的最后。