googletest是否支持通过命令行参数指定执行第N个测试用例
完全支持指定单个测试用例单独运行,不需要采用单cpp文件存单个用例的笨拙方案,具体用法和注意事项如下:
按fixture+用例名精准执行(最稳定推荐)
GoogleTest原生带--gtest_filter命令行参数,就是用来筛选运行指定测试用例的,语法非常简单:./编译生成的测试可执行文件 --gtest_filter=测试夹具名.测试用例名
举个例子,假设你有个叫CalcTest的测试夹具,下面写了个TestAdd的用例,直接执行:./calc_test --gtest_filter=CalcTest.TestAdd
程序就只会跑这一个指定用例,其余所有用例都会跳过,跑完直接就能采集这个用例对应的gcov覆盖率数据,刚好匹配你的需求。全量测试用例获取(不用写正则扫源码)
不用费劲写正则扫cpp文件提取用例,GoogleTest自带参数可以直接输出所有已经注册的有效测试用例,比扫源码靠谱太多——不会把注释里的示例、没被编译进二进制的废弃用例误识别成有效用例:./编译生成的测试可执行文件 --gtest_list_tests
跑这个命令的输出格式很规整:顶格行是测试夹具名,下面缩进的行就是这个夹具下对应的所有测试用例名,用Python简单做文本解析,就能拿到所有<夹具名, 用例名>的组合,遍历执行就能把所有用例的单独覆盖率都采到。关于“按第N个用例运行”的说明
GoogleTest没有提供直接指定运行第N个用例的参数,而且这种方式本身就不靠谱:只要你增删用例、调整用例注册顺序,序号对应的实际用例就会变,很容易采到错配的覆盖率数据,完全没必要用这种方式。
gcov采集踩坑提醒:gcov生成的
.gcda计数文件默认会累加多次运行的结果,每跑完一个测试用例,一定要先把当前生成的.gcda文件挪到对应这个用例的单独目录里,再跑下一个用例,不然所有用例的覆盖率会叠在一起,拿不到单维度的结果。
内容的提问来源于stack exchange,提问作者Bob

