如何处理跨多行拆分的TEST_F测试用例名称提取逻辑?
解决多行TEST_F格式的类名与测试用例名提取问题
原来的代码仅能处理单行的TEST_F(CLASSNAME, TESTCASENAME)格式,遇到跨多行的格式化结果就会失效。可以通过跟踪TEST_F代码块、合并多行内容的方式修复,修改后的代码逻辑如下:
import os print("Looking for new tests") cpp_tests_dir_path = "你的测试文件目录路径" # 替换为实际路径 for root, dirs, files in os.walk(cpp_tests_dir_path): for file in files: with open(os.path.join(root, file), encoding="utf8", errors='ignore') as f: in_test_f = False test_f_content = [] for line in f: stripped_line = line.strip() if "TEST_F(" in stripped_line: in_test_f = True # 提取TEST_F(之后的内容,加入收集列表 test_f_content.append(stripped_line.split("TEST_F(")[1]) elif in_test_f: test_f_content.append(stripped_line) # 检查是否到结束符) if ")" in stripped_line: in_test_f = False # 合并所有收集的内容,去除多余空白 full_content = ''.join(test_f_content).replace(' ', '').replace('\t', '') # 分割类名和测试用例名 parts = full_content.split(",") if len(parts) >= 2: c_class = parts[0].strip() c_test_case = parts[1].split(")")[0].strip() print(f"类名: {c_class}, 测试用例名: {c_test_case}") # 重置收集列表 test_f_content = []
关键修改说明:
- 新增
in_test_f状态变量,标记是否处于TEST_F代码块的处理状态 - 检测到
TEST_F(时,开始收集后续所有行的内容,直到遇到闭合符) - 合并收集到的内容后,先清除所有空白字符(空格、换行、制表符),再用分割逻辑提取类名和测试用例名
- 处理完成后重置状态和收集列表,继续处理文件后续内容
这种逻辑同时兼容单行和多行的TEST_F格式,无论自动格式化如何换行,只要核心结构符合TEST_F(类名, 测试用例名)的规则,都能正确提取目标内容。
内容的提问来源于stack exchange,提问作者user22907663
相关产品推荐
相关产品推荐

