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

FMc*_*FMc 8 ruby unit-testing testunit

例如,当运行这些测试时,我想确保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
Run Code Online (Sandbox Code Playgroud)

更新:我为什么要这样做?我的想法是某些测试的早期失败(那些测试更简单,更基本的方法)将使得更容易追踪系统中的问题.例如,bar取决于fizz正确工作的成功与否.如果fizz坏了,我想立即知道,因为没有必要担心bar,这也会失败,但测试结果的输出要复杂得多.

knu*_*nut 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
Run Code Online (Sandbox Code Playgroud)

结果:

Loaded suite test
Started
:b
.:a
.:c
.

Finished in 0.001 seconds.
Run Code Online (Sandbox Code Playgroud)

没有test_order = :defined你得到字母顺序:

Loaded suite test
Started
:a
.:b
.:c
.
Run Code Online (Sandbox Code Playgroud)


Joy*_*tta 5

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

如果你真的需要很好的控制,定义比其他前缀嘶嘶声和酒吧方法test_一中和test_fizz_bar法,有条件地打电话给他们,以便和运行酒吧运行时的香味的成功.

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

  • 根据我的经验,同一测试类中的测试按字母顺序调用. (4认同)

Jon*_*ian 3

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

def test_AAA_fizz
Run Code Online (Sandbox Code Playgroud)

对于代码可读性来说,这可能被认为是丑陋的,也可能是有用的,具体取决于您的观点。