如何配置bazel test无参数时默认运行当前目录测试?
实现
bazel test默认运行当前目录测试的方案 刚从Make转Bazel的时候,确实会怀念Make那种“在当前目录敲个命令就跑本地测试”的便捷性——毕竟不用每次手动输入目标路径。下面给你两种实用的实现方式:
方法1:用Bazel目标模式+Shell别名(最快上手)
Bazel本身支持目标模式匹配,可以直接指定当前目录下所有*_test规则:
bazel test .:*_test
解释一下:
.代表当前工作目录的Bazel包:*_test匹配该包下所有名称以_test结尾的目标(正好对应你的测试规则)
为了不用每次都敲这么长的命令,直接给它整个Shell别名:
# 把这行加到你的~/.bashrc或~/.zshrc里 alias bazel-test='bazel test .:*_test'
之后在任意目录下,只要有BUILD文件和测试规则,敲bazel-test就会自动跑当前目录的所有测试,完全符合你想要的效果。
方法2:在BUILD文件中定义test_suite(更规范的Bazel方式)
如果想在Bazel层面统一管理本地测试,可以在每个包含测试的BUILD文件里添加一个test_suite规则:
test_suite( name = "local_tests", tests = [":*_test"], # 如果需要排除某些测试,可以加excludes参数 # excludes = [":some_skip_test"], )
之后运行当前目录测试的命令就变成:
bazel test :local_tests
同样可以把这个命令做成Shell别名,让操作更快捷。
额外提示
- 如果想同时跑当前目录和所有子目录的测试,可以用
bazel test ...,但这会递归跑所有下层包的测试,按需选择即可。 - 注意:Bazel默认不带目标的
bazel test会跑整个工作区的所有测试,没法直接修改这个默认行为,但通过上面的别名或test_suite方案,完全可以模拟出你想要的“当前目录自动跑测试”的效果。
内容的提问来源于stack exchange,提问作者c4urself
相关产品推荐
相关产品推荐

