我正在测试一些
Ruby代码,并且有一个失败的Test :: Unit :: TestCase.不幸的是,故障报告只给我最大的错误,而不是一个完整的堆栈跟踪.具体来说,它说:
1) Failure: test_tp_make(TestScripts::TestTpMake) [test/test_scripts.rb:73]: Exception raised: <#<NoMethodError: undefined method `[]' for nil:NilClass>>.
引用的行号(73)是我的测试用例中的assert_nothing_raised代码块的开始,它反过来又启动另一个代码块,该代码块又调用到一个大库中.
我已经尝试使用–verbose标志运行测试,不幸的是这不会更改异常输出.我试图咨询Test :: Unit文档,但它似乎没有枚举可用的选项(例如,没有什么有用的here).在Web和StackOverflow上搜索如何在Rails中启用堆栈跟踪的一些答案,但这是非Rails的ruby代码.
我可以从测试中提取失败的代码,并将其运行在Test :: Unit之外,使我能够看到所有的输出.但是,每当我进行失败测试时,这样做会很痛苦.
有没有人知道如何让Test :: Unit给我一个完整的堆栈跟踪?
解决方法
查看Ruby 1.8中Test :: Unit的代码,似乎所有错误都通过Test :: Unit :: Error对象,该对象过滤了#long_display方法中的回溯.没有配置,所有跑步者都将使用相同的过滤轨迹.
蛮力的猴子补丁得到整个痕迹:(我把它放在我的单个测试用例文件中;也许你可以把它放在一个测试助手)
require 'test/unit/util/backtracefilter' module Test::Unit::Util::BacktraceFilter def filter_backtrace(backtrace,prefix=nil) backtrace end end
和Ruby 1.9的猴子补丁(使用minitest)
def MiniTest.filter_backtrace(bt) bt end