【问题标题】:In Ruby, how to I control the order in which Test::Unit tests are run?在 Ruby 中,如何控制 Test::Unit 测试的运行顺序?
【发布时间】:2010-12-18 21:02:27
【问题描述】:

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

【问题讨论】:

  • 为什么要这样做?我当然希望您的测试顺序不会影响测试结果。如果是这样,那你就做错了。
  • 我同意 gotgenes。我看到了你的更新,但是如果 bar 依赖于 fizz,你应该测试 fizz,然后在测试 bar 时存根 fizz 的结果以避免交叉污染,而不是确保你的测试以特定的顺序运行。如果 fizz 正在测试更高级别的功能,也许您应该将其改为功能测试。
  • 拥有一套有序的断言很好,但它不再是单元测试。它的功能/集成/行为(无论你想怎么称呼它......都是一样的)。您应该使用为它设计的工具,例如 rspec

标签: ruby unit-testing testunit


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢您的建议。在我发布的代码中,测试按照定义的顺序运行;相反,test_bar 先运行。
    • 根据我的经验,同一个测试类中的测试按字母顺序调用。
    • @JonathanJulian:确实。需要时 -10 在哪里?
    【解决方案3】:

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

    def test_AAA_fizz
    

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

    【讨论】:

    • test "01) should run first test" do ... end
    猜你喜欢
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2014-10-07
    相关资源
    最近更新 更多