gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:39:24 24 4
gpt4 key购买 nike

我正在测试一些 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 )。搜索网络和 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 - 如何从 Test::Unit::TestCase 获取堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9346101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com