Gra*_*oss 2 ruby inheritance unit-testing testunit
我有两个单元测试,应该使用略有不同的设置方法共享许多常见测试.如果我写的东西像
class Abstract < Test::Unit::TestCase
def setup
@field = create
end
def test_1
...
end
end
class Concrete1 < Abstract
def create
SomeClass1.new
end
end
class Concrete2 < Abstract
def create
SomeClass2.new
end
end
Run Code Online (Sandbox Code Playgroud)
然后Concrete1似乎没有从Abstract继承测试.或者至少我不能让它们在日食中运行.如果我为包含Concrete1的文件选择"Run all TestCases",那么即使我不想要它也会运行Abstract.如果我指定Concrete1那么它根本不运行任何测试!如果我在Concrete1中指定test_1,那么它会抱怨它无法找到它("uncaught throw:invalid_test(ArgumentError)").
我是Ruby的新手.我在这里错过了什么?
问题是,据我所知,Test::Unit跟踪哪些类继承Test::Unit::TestCase,因此,只会从直接继承它的类中运行测试.
解决此问题的方法是使用所需的测试创建一个模块,然后将该模块包含在派生自的类中Test::Unit::TestCase.
require 'test/unit'
module TestsToInclude
def test_name
assert(self.class.name.start_with?("Concrete"))
end
end
class Concrete1 < Test::Unit::TestCase
include TestsToInclude
def test_something_bad
assert(false)
end
end
class Concrete2 < Test::Unit::TestCase
include TestsToInclude
def test_something_good
assert(true)
end
end
Run Code Online (Sandbox Code Playgroud)
输出:
Loaded suite a Started .F.. Finished in 0.027873 seconds. 1) Failure: test_something_bad(Concrete1) [a.rb:13]: <false> is not true. 4 tests, 4 assertions, 1 failures, 0 errors shell returned 1
| 归档时间: |
|
| 查看次数: |
1574 次 |
| 最近记录: |