将bazel单元测试中的文件作为外部依赖项进行归档

时间:2018-06-13 14:12:56

标签: unit-testing bazel

我有一个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文件中指定了该名称),因此无法找到文件。单元测试也不知道它是否应该附加在外部。

这似乎应该很简单,所以我希望我能错过一些明显的东西。

1 个答案:

答案 0 :(得分:1)

您的单元测试如何取决于项目栏的文件?单元测试是否要求文件存在于相对路径下?

(另外,您的测试使用的语言是什么?您对项目设置的具体了解越多,我就越能提供帮助:))

您是否考虑过通过标志/参数将测试依赖项的位置传递给您的测试?如果可以,如果您使用$(location) substitution,Bazel可以帮助将这些路径解析为绝对路径。

例如,您的测试目标可能如下所示:

my_unit_test(
  name = "test",
  srcs = ["mysrc.file"],
  deps = ["@bar//barproj/other.file"],
  args = [
    "$(location @bar//barproj/other.file)",
  ],
)

如果这还不够,请告诉我!