我正在测试一些Ruby代码并且有一个失败的Test :: Unit :: TestCase.不幸的是,失败报告只给出了最大的错误,而不是完整的堆栈跟踪.具体来说,它说:
1) Failure:
test_tp_make(TestScripts::TestTpMake) [test/test_scripts.rb:73]:
Exception raised:
<#<NoMethodError: undefined method `[]' for nil:NilClass>>.
Run Code Online (Sandbox Code Playgroud)
引用的行号(73)是我测试用例中assert_nothing_raised代码块的开始,后者又启动另一个代码块,后者又调用大型库.
我尝试使用--verbose标志运行测试,遗憾的是这不会更改异常输出.我试着咨询了测试::单位的文件,但它似乎不枚举可用选项(例如,没有什么有用的在这里).搜索Web和StackOverflow表明了如何在Rails中启用堆栈跟踪的一些答案,但这是非Rails ruby代码.
我可以从测试中提取失败的代码并在Test :: Unit之外运行它,使我能够看到所有的输出.但是每次测试失败都会很痛苦.
有谁知道如何让Test :: Unit给我一个完整的堆栈跟踪?
Pat*_*ick 14
通过查看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
Run Code Online (Sandbox Code Playgroud)
和Ruby 1.9的猴子补丁(使用minitest)
def MiniTest.filter_backtrace(bt)
bt
end
Run Code Online (Sandbox Code Playgroud)