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对象调用方法:
- 找到插件文件路径:
/usr/lib/ruby/gems/2.7.0/gems/ceedling-0.31.1/plugins/junit_tests_report/lib/junit_tests_report.rb - 定位到第60行,将原代码:
修改为:test.merge(metadata)(test || {}).merge(metadata || {}) - 保存文件后重新执行测试命令。
方案3:排查异常测试用例
部分测试可能未正确生成结果元数据,可分批运行测试,定位触发错误的测试文件,检查测试代码是否存在环境初始化异常、输出格式异常等问题。
内容的提问来源于stack exchange,提问作者ElectroPro
相关产品推荐
相关产品推荐

