8

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

4

3 回答 3

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
.
于 2014-07-01T09:31:04.453 回答
5

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

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

编辑:似乎不同的单元测试框架表现不同。对于 Eclipse 中的 JUnit,测试用例似乎以随机顺序运行:Ordering unit tests in Eclipse's JUnit view

于 2009-11-20T20:16:05.637 回答
3

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

def test_AAA_fizz

对于代码的可读性,这可能会被认为是丑陋的或有用的,这取决于您的观点。

于 2009-11-21T20:40:12.780 回答