如何在Catch2中打印失败的测试用例名称
Catch2 打印所有失败测试用例的实现方法
方案1:使用内置命令行参数(无需修改代码)
这是最便捷的实现方式,直接在运行测试二进制文件时传入对应的报告器参数即可:
- 使用精简报告器:添加
-r compact或--reporter compact参数,测试运行完成后会自动在控制台末尾汇总输出所有失败测试用例的名称、所在文件行号、失败断言的具体内容,不需要遍历全量运行日志。 - 如果你需要结构化的失败用例数据用于后续自动化解析,可以添加
-r junit参数,会输出标准JUnit格式的XML结果,所有失败用例会被单独归类到结果文件的对应节点中。
方案2:自定义监听器(代码层面定制输出逻辑)
如果需要自定义失败用例的输出格式、或者要把失败信息写入指定的日志文件,可以通过Catch2的监听器机制实现:
- 继承Catch2提供的监听器基类,重写测试用例结束的回调方法,判断用例执行状态,失败时输出你需要的信息,示例代码如下(适配Catch2 v3版本):
#include <catch2/catch_all.hpp> class FailedCaseLogger : public Catch::TestEventListenerBase { public: using TestEventListenerBase::TestEventListenerBase; void testCaseEnded(Catch::TestCaseStats const& stats) override { if (stats.totals.assertions.failed > 0) { Catch::cerr() << "\n=== 失败测试用例信息 ===" << "\n"; Catch::cerr() << "用例名称:" << stats.testInfo->name << "\n"; Catch::cerr() << "所在位置:" << stats.testInfo->lineInfo.file << ":" << stats.testInfo->lineInfo.line << "\n"; } } }; // 注册自定义监听器 CATCH_REGISTER_LISTENER(FailedCaseLogger)
- 如果你使用的是Catch2 v2版本,只需调整两处代码即可:
- 头文件替换为
#include <catch2/catch.hpp> - 监听器基类替换为
Catch::TestListener
- 注意:上述代码只需要添加在定义
CATCH_CONFIG_MAIN的测试入口文件中即可,不需要修改现有测试用例的代码。
内容的提问来源于stack exchange,提问作者Emiliano
相关产品推荐
相关产品推荐

