首页 > 解决方案 > 如何在自定义测试运行器中将 Bazel 标签解析为其 jar,以便能够提取打包的单元测试?

问题描述

使用 Bazel,我们有一个宏,我们从 BUILD 文件中调用它来调用我们的自定义测试运行器。此宏对 java_test 进行本地调用,类似于:

native.java_test(
    name = name,
    srcs = srcs,
    resources = resources,
    use_testrunner = False,
    main_class = "com.example.CustomTestRunner",
    args = srcs,
    deps = deps,
    runtime_deps = runtime_deps + ["//bazel/tools/testng:testng_runner"],
    **kwargs
)

在我们的 BUILD 文件中,调用宏的目标类似于:

java_custom_test(
    name = "test",
    srcs = glob(["src/test/java/**/*.java"]) + [
        ":sdk_gen_model_test",
        ":sdk_gen_controller_test",
    ],
    resources = glob(["src/test/resources/**/*"]),
    deps = [
        "@maven//:org_mockito_mockito_core",
        "@maven//:org_testng_testng",
    ],
)

将 srcs 传递给宏中的 args,希望在 CustomTestRunner 中我可以访问所有单元测试文件,这对于 glob(["src/test/java/**/*.java"] 标识的那些文件是正确的)。

但是,在 ":sdk_gen_model_test" 和 ":sdk_gen_controller_test" 的情况下,这两个是指生成单元测试的目标,这些目标会打包到一个 jar 中。不幸的是,这两个标签字符串按原样传递给 CustomTestRunner,我很难弄清楚如何从它们中解析生成的 jar。

所以问题是,我怎样才能让 Bazel 将这两个目标生成的文件列表传递给 CustomTestRunner,或者至少有一些方法可以将这些标签解析为 jar,以便我可以在 CustomTestRunner 中提取文件?

标签: javatestingbuildbazelbazel-rules

解决方案


推荐阅读