在Ruby中,如何控制Test :: Unit测试的运行顺序?

例如,运行这些测试时,我想确保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 ,它也会失败,但测试结果的输出要复杂得多。

使用低排序字母名称命名要首先运行的测试。

 def test_AAA_fizz 

对于代码可读性,根据您的观点,这可能被视为丑陋或有用。

同一测试类中的测试按其定义的顺序调用。 但是,测试类按类名按字母顺序运行。

如果您真的需要精确控制,请使用除test_之外的前缀定义fizz和bar方法,并在test_fizz_bar方法内部按顺序调用它们,并在运行fizz成功时有条件地运行bar。

编辑:似乎不同的unit testing框架表现不同。 对于Eclipse中的JUnit,似乎测试用例以随机顺序运行: 在Eclipse的JUnit视图中排序unit testing

您可以使用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 .