以下代码(没有Gemfile)适用于Ruby 2.1.1,但不适用于Ruby 2.2.0
require "bundler/setup"
gem "minitest", "4.7.5"
require "test/unit"
class TestFoo < Test::Unit::TestCase
def test_foo
assert true, "Useless mesage"
skip "Skip works"
end
end
在Ruby 2.1.1上,我得到了
Run options:
# Running tests:
[1/1] TestFoo#test_foo = 0.00 s
1) Skipped:
TestFoo#test_foo [test_220.rb:8]:
Skip works
Finished tests in 0.004435s, 225.4791 tests/s, 225.4791 assertions/s.
1 tests, 1 assertions, 0 failures, 0 errors, 1 skips
ruby -v: ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin10.0]
但是在Ruby 2.2.0上,我得到了
192-168-1-5:test_220 agrimm$ ruby test_220.rb
Loaded suite test_220
Started
E
===============================================================================
Error: test_foo(TestFoo)
: NoMethodError: undefined method `skip' for #<TestFoo:0x007fb75484f158>
test_220.rb:8:in `test_foo'
5: class TestFoo < Test::Unit::TestCase
6: def test_foo
7: assert true, "Useless mesage"
=> 8: skip "Skip works"
9: end
10: end
===============================================================================
Finished in 0.001504 seconds.
1 tests, 1 assertions, 0 failures, 1 errors, 0 pendings, 0 omissions, 0 notifications
0% passed
664.89 tests/s, 664.89 assertions/s
$ ruby --version
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin13]
我怀疑这是因为changes associated with Ruby 2.2.0:
更新测试单元3.0.8(从存储库中删除但捆绑在中 压缩包)
更新minitest 5.4.3(从存储库中删除但捆绑在tarball中)
如何使代码在Ruby 2.2上运行,最好用最少的代码更改?
答案 0 :(得分:13)
在Ruby 2.2之前,test/unit
只是minitest
的一个薄包装器。即使您的测试用例继承自Test::Unit::TestCase
,您实际上也使用了最小的断言。因此skip
有效,这是minitest
的一项功能。
标准的Ruby 2.2发行版捆绑test-unit 3.0.8
和minitest 5.4.3
,但不包括之前存在的集成。请注意,它们实际上是两个独立的测试框架 - 基本上是两个独立的宝石。
我提出两个选择:
test-unit
- rubydoc 您的测试可以保留Test::Unit::TestCase
基类,但您需要调整断言以使用test-unit
基类。
例如,将skip
替换为omit
:
require "test/unit"
class TestFoo < Test::Unit::TestCase
def test_foo
assert true, "Useless mesage"
omit "Omit works"
end
end
minitest
- rubydoc 您将继续使用您知道的断言,但您需要require "minitest/autorun"
并将基类切换为Minitest::Test
:
require "minitest/autorun"
class TestFoo < Minitest::Test
def test_foo
assert true, "Useless mesage"
skip "Skip works"
end
end
答案 1 :(得分:2)
测试单元backports已被包装成gem:test-unit-minitest