我有一个 bazel 项目,称之为 foo,带有 Catch从相对路径读取文件的 C++ 单元测试。
单元测试在 foo 项目中运行良好。
我正在使用 foo 作为另一个项目的外部依赖项,将其称为 bar。我希望单元测试能够在 bar 中工作,但在 bar 中他们找不到文件。
我不明白的是如何以独立于项目的方式查找文件。在项目 foo 中,文件放置在:
~/.cache/<blah>/<blah>/<testname.runfiles>/__main__/source/
但是在项目栏中,文件放置在
~/.cache/<blah>/<blah>/<testname.runfiles>/__main__/external/bars_archive_name/source
bazel 提供的 TEST_SRCDIR 环境变量指向该目录,但由于两个不同的目录结构,这没有帮助。
单元测试无法知道 bar 的存档名称(因为该名称是在 foo 的 WORKSPACE 文件中指定的),因此无法找到这些文件。单元测试也不知道是否应该附加外部。
这看起来应该很简单,所以我希望我遗漏了一些明显的东西。
最佳答案
你的单元测试是如何依赖项目栏的文件的?单元测试是否要求文件存在于相对路径下?
(另外,您的测试使用什么语言?您的项目设置越具体,我就越能提供帮助:))
您是否考虑过通过标志/参数将测试依赖项的位置传递给您的测试?如果有可能,Bazel 可以帮助将这些路径解析为绝对路径(如果您使用 $(location) substitution) .
例如,您的测试目标可能如下所示:
my_unit_test(
name = "test",
srcs = ["mysrc.file"],
deps = ["@bar//barproj/other.file"],
args = [
"$(location @bar//barproj/other.file)",
],
)
如果这还不够,请告诉我!
关于unit-testing - 在 bazel 单元测试中查找文件作为外部依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50839411/