如何使用 Bazel 运行所有 JUnit 测试

Dyl*_*ers 2 java junit maven bazel

我一直在尝试使用 Bazel 在一个目录中运行所有 JUnit 测试。据我所知,该java_test规则只能运行特定的类。但是,我正在寻找更像mvn test是在项目中运行所有 JUnit 测试的行为。我怎样才能做到这一点?

ahu*_*sky 9

组织它的典型方法是为java_test每个 Java 测试类或每组相关的 Java 测试类制定一个规则。然后java_test可以使用 将 s 组合在一起test_suite,如果这是您想要做的事情。

您可以在一个包中运行所有测试:

bazel test //some/package:all
Run Code Online (Sandbox Code Playgroud)

或在一个包及其子包中:

bazel test //some/package/...
Run Code Online (Sandbox Code Playgroud)

或在整个工作区:

bazel test //...
Run Code Online (Sandbox Code Playgroud)

有关目标模式的更多信息:https : //docs.bazel.build/versions/master/guide.html#target-patterns

如果你只想要一个java_test在目录中运行所有测试的,你可以做类似的事情

java_test(
    name = "tests",
    srcs = glob(["*Test.java"]),
    deps = [ ..... ],
)
Run Code Online (Sandbox Code Playgroud)

但这可能是也可能不是正确的做法。特别是,如果您只想运行一个测试或一个测试方法(例如 using --test_filter),bazel 仍会构建所有java_test的依赖项。另外,请注意globs 仅在构建包中使用 glob,不会交叉到其他包中。

  • 如果我尝试使用“glob”运行目录中的所有测试,我会得到“无法确定测试类”。但是,我真的只是希望它运行当前包中用“@Test”注释的所有测试。有什么建议吗? (2认同)
  • 您需要一个 junit 测试套件(在“test_class”属性中指定)来发现测试类。看看这里的解决方案:/sf/ask/3245582511/ (2认同)