例如,运行这些测试时,我想确保test_fizz
始终先运行。
require 'test/unit'
class FooTest < Test::Unit::TestCase
def test_fizz
puts "Running fizz"
assert true
end
def test_bar
puts "Running bar"
assert true
end
end
更新:我为什么要这样做?我的想法是某些测试的早期失败(那些测试更简单,更基本的方法)将使得更容易追踪系统中的问题。例如,bar
的成功取决于fizz
正常工作。如果fizz
被破坏,我想立即知道,因为没有必要担心bar
,这也会失败,但测试结果的输出要复杂得多。
答案 0 :(得分:6)
您可以使用Test::Unit::TestCase#test_order = :defined
示例:
gem 'test-unit' #I used 2.5.5
require 'test/unit'
class Mytest < Test::Unit::TestCase
self.test_order = :defined
#~ self.test_order = :random
#~ self.test_order = :alphabetic #default
def test_b
p :b
end
def test_a
p :a
end
def test_c
p :c
end
end
结果:
Loaded suite test
Started
:b
.:a
.:c
.
Finished in 0.001 seconds.
如果没有test_order = :defined
,您将获得字母顺序:
Loaded suite test
Started
:a
.:b
.:c
.
答案 1 :(得分:5)
同一测试类中的测试按其定义的顺序调用。但是,测试类按类名按字母顺序运行。
如果你真的需要精确控制,请使用test_
之外的前缀定义fizz和bar方法,并在test_fizz_bar
方法内定义fizz和bar方法,按顺序调用它们并在运行fizz成功时有条件地运行bar
编辑: 看起来不同的单元测试框架表现不同。对于Eclipse中的JUnit,似乎测试用例以随机顺序运行:Ordering unit tests in Eclipse's JUnit view
答案 2 :(得分:3)
使用低排序字母名称命名要运行的测试。
def test_AAA_fizz
对于代码可读性,根据您的观点,这可能被视为丑陋或有用。