我继承了一大套Test :: Unit测试,我的第一个任务之一是让套件运行完成而不是在第一次测试失败后退出。
我正在抢救AssertionFailedError
并确保输出字符串,但这似乎是错误的。有什么更好的方法?似乎它将是一个配置选项。
答案 0 :(得分:4)
更多背景会有所帮助。我不能说我理解你所看到的行为。
我正在使用ruby 1.8附带的核心测试/单元库,以及带有ruby 1.9的几个版本的gem。这两者的正常行为是运行整个加载的套件以完成并总结结果。
运行一个说require 'test/unit'
的脚本将添加一个退出时挂钩,以便与Test::Unit::AutoRunner
收集器一起运行Test::Unit::Collector::ObjectSpace
(即运行当前加载的Test::Unit::TestCase
的每个实例全局对象空间)。
编写自己的自定义测试运行器也很容易,它会手动加载测试类并将它们打包到Test::Unit::TestSuite
中,并捕获其结果。
但是我使用的每个版本的测试/单元,我总是看到整个套件完成并报告失败和错误。除了进一步的信息,我建议尝试一个虚拟测试,看看你应该期望测试/单位的行为。
例如
require 'test/unit'
class Foo < Test::Unit::TestCase
def testFoo
flunk 'bad foo'
end
end
class Bar < Test::Unit::TestCase
def testBar
raise 'bar bar'
end
end
给出
Loaded suite foo
Started EF Finished in 0.001000 seconds.
1) Error:
testBar(Bar)
RuntimeError: bad bar
foo.rb:9:in `testBar`
2) Failure:
testFoo(Foo) [foo.rb:4]:
bad foo
2 tests, 1 assertions, 1 failures, 1 errors, 0 skips
最后:你想在哪里营救/确保?在测试方法?在正常情况下,没有理由捕获AssertionFailedError。这是Test::Unit::TestCase
要做的,作为计算失败并为您提供所需报告的方法。捕获这会干扰要编写的测试/单元。