bats测试文件最佳存放位置及跨目录引用bash脚本方法咨询
BATS测试文件存放与引用方案
- 不存在强制要求BATS测试文件必须和待测试Bash脚本存放在同一目录。
- 行业通用最佳实践是在项目根目录下单独创建
test或tests目录,统一存放所有BATS测试用例,和业务脚本目录做明确拆分。这种方式的优势是方便集中管理测试资产,CI集成时可以直接指定测试目录批量执行,也能避免测试文件被意外打包到生产交付的脚本产物中。如果是仅包含单个脚本的微型工具,把.bats文件和待测试脚本放在同目录也完全可以正常运行,只是随着脚本数量增多,目录会显得杂乱,不适合中大型脚本项目使用。
独立存放测试文件时的脚本引用方法
- 绝对不要写依赖执行命令时工作目录的硬编码相对路径,最稳妥的方案是基于BATS内置变量提供的测试文件自身路径,先定位到项目根目录,再拼接待测试脚本的完整路径,这种写法不受测试执行位置影响,稳定性最高。
- 典型项目结构示例:
your-bash-project/ ├── script/ # 存放业务bash脚本的目录 │ └── utils.sh └── tests/ # 统一存放BATS测试文件的目录 └── utils.bats
在utils.bats中引用待测试脚本的参考写法:
#!/usr/bin/env bats # 基于当前测试文件路径,向上定位到项目根目录 PROJECT_ROOT="$(cd "$(dirname "$BATS_TEST_FILENAME")/.." >/dev/null 2>&1 && pwd)" # 加载待测试脚本中的函数、变量 load "$PROJECT_ROOT/script/utils.sh" # 后续测试用例即可直接调用脚本内定义的逻辑 @test "test util function" { run your_util_function [ "$status" -eq 0 ] }
- 注意事项:如果待测试的脚本包含直接执行的主逻辑,建议把主逻辑包裹在如下判断块中,避免加载脚本时主逻辑被意外触发,干扰测试运行:
# 仅当脚本被直接执行时才运行主逻辑,被source/load时不执行 if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then # 你的脚本主逻辑写在这里 main "$@" fi
内容的提问来源于stack exchange,提问作者Roland
相关产品推荐
相关产品推荐

