For example, when these tests are run, I want to ensure that test_fizz
always runs first.
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
Update: Why do I want to do this? My thought is that early failure by certain tests (those testing the simpler, more fundamental methods) will make it easier to track down problems in the system. For example, the success of bar
hinges on fizz
working correctly. If fizz
is broken, I want to know that right off the bat, because there's no need to worry about bar
, which will fail too, but with much more complicated output in the test results.
Name the tests you want to run first with a low-sorting alphabetical name.
def test_AAA_fizz
For code readability, this could be considered ugly, or helpful, depending on your point of view.
You can define the test order with Test::Unit::TestCase#test_order = :defined
Example:
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
The result:
Loaded suite test
Started
:b
.:a
.:c
.
Finished in 0.001 seconds.
Without test_order = :defined
you get the alphabetic order:
Loaded suite test
Started
:a
.:b
.:c
.
Tests within the same test class are called in the order they are defined. However, test classes are run in alphabetical order by classname.
If you really need fine control, define the fizz and bar methods with a prefix other than test_
and from inside a test_fizz_bar
method, call them in order and run bar conditionally upon success of running fizz.
EDIT: It seems like different unit test frameworks behave differently. For JUnit in Eclipse, it seems that the test cases run in random order: Ordering unit tests in Eclipse's JUnit view
来源:https://stackoverflow.com/questions/1772890/in-ruby-how-to-i-control-the-order-in-which-testunit-tests-are-run