我正在测试一些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给我一个完整的堆栈跟踪?
答案 0 :(得分: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
用于Ruby 1.9的猴子补丁(使用minitest)
def MiniTest.filter_backtrace(bt)
bt
end
答案 1 :(得分:1)
在您的课程中的任何位置使用它来获得完整的堆栈跟踪。我在单元测试用例中使用它来调试我的测试类。
rescue => e
puts e.inspect
puts e.backtrace