【问题标题】:Shoulda statements are not executed in the order they are defined?语句不应该按照定义的顺序执行吗?
【发布时间】:2013-09-21 08:40:33
【问题描述】:

我正在尝试实现 shoulda 以实现测试自动化。我试过这段代码:

require 'test/unit'
require 'shoulda'
require 'shoulda-context'

class TestClass < Test::Unit::TestCase
  context 'Languages' do
    should 'Ruby' do
      puts 'Ruby'
    end

    should 'Java' do
      puts 'Java'
    end

    should 'Python' do
      puts 'Python'
    end
  end
end

当我执行该代码时,它会根据应该测试方法的字母顺序输出:

Java
Python
Ruby

实际上,我希望按照我编写方法的顺序输出:

Ruby
Java
Python

为此,我必须在我的代码中使用什么?

【问题讨论】:

    标签: ruby unit-testing testunit shoulda


    【解决方案1】:

    实际上最好不要按特定顺序运行测试。最好以随机顺序运行它们,因为这样可以让您识别是否存在依赖于其他测试的测试。如果测试仅按特定顺序通过,则表明您做错了。

    如果你仍然想这样做:

    class TestClass < Test::Unit::TestCase
      context 'Languages' do
        self.test_order = :defined
        ...
    

    见:http://test-unit.rubyforge.org/test-unit/en/Test/Unit/TestCase.html#test_order=-class_method

    【讨论】:

    • 我会使用“首选不运行”。 :)
    • 感谢斯派克曼。我试过你的解决方案。但它不起作用。我把 test_order = :defined 在上面的代码中仍然应该按字母顺序执行测试方法。
    • 我的错,请尝试self.test_order = :defined
    • 现在,它抛出 ``': undefined method test_order=' for TestClass:Class (NoMethodError) 现在,我还有一个问题,这个排序不是特定于 should 库的。在这里,它与testunit 有关。我说的对吗?
    • 你使用什么版本的 ruby​​? test_order 在 1.8.x 中不存在
    猜你喜欢
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 2021-04-27
    • 2011-09-27
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2012-05-28
    相关资源
    最近更新 更多