Jua*_*uan 5 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
Run Code Online (Sandbox Code Playgroud)
当我运行'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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我找到的所有教程和示例都表明我的第一个例子应该可行.
查看 Test::Unit 2.3.0 的代码,这正是编码的行为。除非给定一个块,否则它会抛出异常。
该文档列出了 as 的来源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
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果您升级过,在 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
Run Code Online (Sandbox Code Playgroud)
使用turngem 漂亮地打印我的输出,我得到:
$ 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
Run Code Online (Sandbox Code Playgroud)