【发布时间】:2021-02-17 22:34:22
【问题描述】:
我有一个要使用go_test 运行的测试,但是它会读取一些文件以运行测试 - 在本例中是一个 Excel 文件。
当我尝试运行测试时,我尝试读取文件"testdata/good_file.xlsx" 的相对路径,但我得到一个文件未找到错误。如果我使用go test 正常运行测试,它工作正常。如何从我在 bazel 中的测试中读取此文件?
【问题讨论】:
我有一个要使用go_test 运行的测试,但是它会读取一些文件以运行测试 - 在本例中是一个 Excel 文件。
当我尝试运行测试时,我尝试读取文件"testdata/good_file.xlsx" 的相对路径,但我得到一个文件未找到错误。如果我使用go test 正常运行测试,它工作正常。如何从我在 bazel 中的测试中读取此文件?
【问题讨论】:
请注意,此答案适用于所有语言,而不仅仅是 Go。它也适用于像 go_binary 或 go_image 这样的二进制文件,而不仅仅是测试。
Bazel 尝试为您的二进制文件创建一个密封环境,这意味着任何未在 BUILD.bazel 文件中明确指定的内容都将被忽略,并且从任何正在运行的内容的角度来看,它们都不存在。
包含它是相当简单的。您首先创建一个包装数据的filegroup 目标:
filegroup(
name = "testdata",
srcs = [
"testdata/good_file.xlsx",
],
# Alternatively you can use a glob if you want to get all the Excel files, which is usually
# the case when working with tests:
# srcs = glob(["testdata/*.xlsx"]),
)
然后在您的测试目标中,使用 data 属性包含数据:
go_test(
name = "my_test",
# ... some fields ...
data = [
":testdata",
],
# ... more fields ...
)
【讨论】: