我有一个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文件中指定了该名称),因此无法找到文件。单元测试也不知道它是否应该附加在外部。
这似乎应该很简单,所以我希望我能错过一些明显的东西。
答案 0 :(得分:1)
您的单元测试如何取决于项目栏的文件?单元测试是否要求文件存在于相对路径下?
(另外,您的测试使用的语言是什么?您对项目设置的具体了解越多,我就越能提供帮助:))
您是否考虑过通过标志/参数将测试依赖项的位置传递给您的测试?如果可以,如果您使用$(location) substitution,Bazel可以帮助将这些路径解析为绝对路径。
例如,您的测试目标可能如下所示:
my_unit_test(
name = "test",
srcs = ["mysrc.file"],
deps = ["@bar//barproj/other.file"],
args = [
"$(location @bar//barproj/other.file)",
],
)
如果这还不够,请告诉我!