【问题标题】:Finding files in bazel unit tests as an external dependency在 bazel 单元测试中查找文件作为外部依赖项
【发布时间】:2020-11-23 16:25:29
【问题描述】:

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

这看起来应该很简单,所以我希望我遗漏了一些明显的东西。

【问题讨论】:

    标签: unit-testing bazel


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 2021-10-16
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多