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

前端之家收集整理的这篇文章主要介绍了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

猜你在找的Ruby相关文章