You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ceedling生成JUnit测试报告失败:merge方法未定义(nil:NilClass)

解决Ceedling生成JUnit报告时的NilClass错误

问题背景

执行ceedling test:all gcov:all utils:gcov命令后,124项测试全部通过,但JUnit测试报告插件触发undefined method 'merge' for nil:NilClass错误。

报错信息

--------------------
OVERALL TEST SUMMARY
--------------------
TESTED:  124
PASSED:  124
FAILED:    0
IGNORED:   0

Exception raised in plugin: junit_tests_report, in method post_build
Traceback (most recent call last):
    16: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/lib/ceedling/rakefile.rb:78:in `block in <top (required)>'
    15: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/lib/ceedling/plugin_manager.rb:85:in `post_build'
    14: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/lib/ceedling/plugin_manager.rb:97:in `execute_plugins'
    13: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/lib/ceedling/plugin_manager.rb:97:in `each'
    12: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/lib/ceedling/plugin_manager.rb:99:in `block in execute_plugins'
    11: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/plugins/junit_tests_report/lib/junit_tests_report.rb:23:in `post_build'
    10: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/plugins/junit_tests_report/lib/junit_tests_report.rb:23:in `each_key'
     9: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/plugins/junit_tests_report/lib/junit_tests_report.rb:30:in `block in post_build'
     8: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/lib/ceedling/file_wrapper.rb:52:in `open'
     7: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/lib/ceedling/file_wrapper.rb:52:in `open'
     6: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/lib/ceedling/file_wrapper.rb:53:in `block in open'
     5: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/plugins/junit_tests_report/lib/junit_tests_report.rb:33:in `block (2 levels) in post_build'
     4: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/plugins/junit_tests_report/lib/junit_tests_report.rb:57:in `reorganise_results'
     3: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/plugins/junit_tests_report/lib/junit_tests_report.rb:57:in `each'
     2: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/plugins/junit_tests_report/lib/junit_tests_report.rb:60:in `block in reorganise_results'
     1: from /usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/plugins/junit_tests_report/lib/junit_tests_report.rb:60:in `map'
/usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/plugins/junit_tests_report/lib/junit_tests_report.rb:60:in `block (2 levels) in reorganise_results': undefined method `merge' for nil:NilClass (NoMethodError)

使用环境

  • Ceedling 0.31.1
  • Ruby 2.7.7p221

解决方案

方案1:升级Ceedling到最新稳定版

0.31.1版本的JUnit报告插件存在已知bug,后续版本已修复。执行以下命令升级:

gem update ceedling

方案2:临时修复插件代码

若无法升级,可修改插件源码避免nil对象调用方法:

  1. 找到插件文件路径:/usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/plugins/junit_tests_report/lib/junit_tests_report.rb
  2. 定位到第60行,将原代码:
    test.merge(metadata)
    
    修改为:
    (test || {}).merge(metadata || {})
    
  3. 保存文件后重新执行测试命令。

方案3:排查异常测试用例

部分测试可能未正确生成结果元数据,可分批运行测试,定位触发错误的测试文件,检查测试代码是否存在环境初始化异常、输出格式异常等问题。

内容的提问来源于stack exchange,提问作者ElectroPro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 08:37:03