如何在Dart项目中找出未添加测试的文件(GitHub Actions实现)
用GitHub Actions自动排查Dart仓库中未添加测试的文件
核心思路是对比源码文件和对应测试文件的命名——Dart社区通常用xxx_test.dart命名测试文件,放在test目录下。我们可以通过GitHub Actions写一个简单的脚本,自动遍历源码文件,检查对应的测试文件是否存在,最后输出未测试的文件列表。
完整的GitHub Actions工作流配置
直接在仓库的.github/workflows目录下创建check-untested-files.yml文件,内容如下:
name: 检查未添加测试的Dart文件 on: [push, pull_request] jobs: check-untested: runs-on: ubuntu-latest steps: - name: 检出仓库代码 uses: actions/checkout@v4 - name: 配置Dart环境 uses: dart-lang/setup-dart@v1 with: sdk: stable - name: 查找未测试文件 run: | # 初始化存储未测试文件的数组 untested_files=() # 遍历lib目录下所有.dart源码文件(根据实际目录调整) for src_file in lib/*.dart; do # 提取文件名(去掉路径和后缀) filename=$(basename "$src_file" .dart) # 拼接对应的测试文件路径 test_file="test/${filename}_test.dart" # 如果测试文件不存在,加入未测试列表 if [ ! -f "$test_file" ]; then untested_files+=("$src_file") fi done # 输出结果 if [ ${#untested_files[@]} -gt 0 ]; then echo "发现未添加测试的文件:" printf '%s\n' "${untested_files[@]}" exit 1 # 可选:触发工作流失败,提醒开发者 else echo "所有源码文件均已添加对应测试" fi
按需调整的细节
- 源码目录:如果你的源码不是放在
lib目录(比如直接在根目录),把遍历路径改成*.dart,同时排除test目录:for src_file in $(ls *.dart | grep -v test) - 测试文件规则:如果你的测试文件命名不是
xxx_test.dart,或者放在其他目录,修改test_file的拼接格式即可 - 递归遍历子目录:如果源码有多层子目录,用
find lib -name "*.dart"来遍历,然后处理路径对应关系(比如lib/utils/tool.dart对应test/utils/tool_test.dart),脚本可以改成:
find lib -name "*.dart" | while read src_file; do # 替换lib/为test/,并在文件名后加_test test_file=$(echo "$src_file" | sed 's/lib\//test\//; s/\.dart$/_test.dart/') if [ ! -f "$test_file" ]; then untested_files+=("$src_file") fi done
- 是否触发失败:如果不需要在发现未测试文件时让工作流失败,删掉
exit 1即可,只保留输出列表。
内容的提问来源于stack exchange,提问作者Akash g krishnan
相关产品推荐
相关产品推荐

