ruby – 如何从Test :: Unit :: TestCase获取堆栈跟踪

我正在测试一些 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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...