如何在Catch2框架中为SECTION名称添加动态参数值
实现方法
你之前拼接字符串给SECTION传参不生效,核心原因是Catch2原生的SECTION宏要求传入的名称必须是编译期可确定的常量字符串,不支持运行时动态生成的内容,自然无法把GENERATE产出的变量值嵌入到测试节点名称中。
要实现你需要的动态区分测试实例的效果,直接使用Catch2内置的DYNAMIC_SECTION宏即可,这个宏专门支持运行时构造测试节点名称,内部可以通过<<运算符拼接任意可流输出的变量值。
修改后的示例代码如下:
TEST_CASE("Evaluate output of is_odd() function") { auto i = GENERATE(1, 3, 5); DYNAMIC_SECTION("Check if " << i << " is odd"){ REQUIRE(is_odd(i)); } }
编译运行测试时传入-s参数,输出效果就会和你预期的完全一致:每个生成值对应的测试实例会单独展示,section名称中会带上当前测试用的实际i取值,直接就能区分不同取值的执行结果。
补充说明
- 该用法在Catch2 v2.13.0及以上版本、所有Catch2 v3版本中均原生支持,不需要额外引入其他组件
DYNAMIC_SECTION内的拼接规则和标准流输出一致,只要变量类型重载了<<流运算符,就可以直接拼接进section名称中,支持整数、字符串、自定义结构体等任意可输出类型。
内容的提问来源于stack exchange,提问作者Shunya
相关产品推荐
相关产品推荐

