如何在TeamCity的bazel run执行中为Go测试添加所需输入文件
问题解答
结论
这不是TeamCity专属配置问题,直接通过Bazel配置即可实现需求。
原因说明
Bazel执行测试时采用沙箱隔离机制,只会将显式声明为依赖的文件放入测试运行时的runfiles目录,你当前未将mydir下的文件声明为测试依赖,因此不会出现在测试工作目录中。
解决方法
修改/my/certain/path/BUILD.bazel中的go_test配置,新增data字段声明需要的运行时文件:
go_test( name = "my_test", size = "enormous", srcs = ["my_test.go"], embed = [":xxx"], # 新增以下行,glob匹配mydir下所有文件及子目录 data = glob(["mydir/**"]), deps = [ "//pkg/util/contextutil", "//pkg/util/log", "@com_github_docker_docker//client", "@org_golang_x_net//context", ], )
如果只需要用到mydir/input1和mydir/input2两个文件,也可以不使用glob,直接写:
data = ["mydir/input1", "mydir/input2"]
效果验证
修改配置后重新执行bazel命令,测试的runfiles目录下就会生成和源码结构一致的mydir目录,代码中直接用相对路径mydir/input1即可访问到对应文件,无需调整现有读取逻辑。
注:
data字段对bazel run和bazel test两种执行方式都生效,不需要调整你当前的执行命令。
内容的提问来源于stack exchange,提问作者IsaIkari
相关产品推荐
相关产品推荐

