在测试单元2.3.0中使用“省略”功能时出错

时间:2011-05-03 19:24:54

标签: ruby unit-testing testunit

我对我的问题感到有些困惑。我使用的是ruby 1.8.7,rails 2.3.2。我正在尝试使用测试单元2.3.0中的“省略”功能。这是我的测试:

def test_create_reward_program
  omit("Pending")

  reward_program = RewardProgram.find_by_program_name("test_foo")
  assert_equal "test_foo", reward_program.program_name

end

当我进行'rake test'时,我得到以下内容:

1) Error:
test_create_reward_program(AwardControllerTest):
Test::Unit::OmittedError: Pending
    /test/functional/award_controller_test.rb:43:in `test_create_reward_program'


148 tests, 261 assertions, 0 failures, 1 errors, 0 pendings, 0 omissions, 0 notifications

0%通过

我不知道为什么它将它标记为“错误”时应将其标记为“遗漏”。有人知道吗?

我也注意到这确实有效:

def test_create_reward_program
  omit "Pending" do
    reward_program = RewardProgram.find_by_program_name("test_foo")
    assert_equal "test_foo", reward_program.program_name
  end        
end

我找到的所有教程和示例都表明我的第一个例子应该有效。

1 个答案:

答案 0 :(得分:2)

查看Test :: Unit 2.3.0的代码,这正是编码行为。除非给出阻止,否则它会抛出。

documentation列出了omit的来源:

# File lib/test/unit/omission.rb, line 77
def omit(message=nil, &block)
  message ||= "omitted."
  if block_given?
    omission = Omission.new(name, filter_backtrace(caller), message)
    add_omission(omission)
  else
    raise OmittedError.new(message)
  end
end

顺便说一句,如果你曾经升级过,运行在Ruby 1.9.2p0上的Rails 3.1.0.rc1(捆绑Minitest)不会定义omit,而是添加skip。例如:

# test/unit/bird_test.rb
require 'test_helper'

class BirdTest < ActiveSupport::TestCase
  test "creation" do
    bird = Bird.new
    assert_not_nil bird
  end

  test "not implemented" do
    skip
    assert false
  end

end

使用turn gem来打印我的输出,我得到:

$ rake test:units
Started

BirdTest:
     PASS creation (0.06s) 
     SKIP not implemented (0.00s) 

Finished in 0.060828 seconds.

2 tests, 1 assertions, 0 failures, 0 errors, 1 skips