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

问题描述 投票:0回答:2

我一直在尝试使用 Bazel 运行目录中的所有 JUnit 测试。据我所知,

java_test
规则只能运行特定的类。但是,我正在寻找更像
mvn test
的行为,它运行项目中的所有 JUnit 测试。我怎样才能做到这一点?

java maven junit bazel
2个回答
16
投票

组织此操作的典型方法是为每个 Java 测试类或每组相关的 Java 测试类设置一个

java_test
规则。然后,如果您想要这样做,可以使用
java_test
test_suite
分组在一起。

您可以使用以下命令运行包中的所有测试:

bazel test //some/package:all

或者在包及其子包中:

bazel test //some/package/...

或在整个工作空间中:

bazel test //...

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

如果您只想要一个

java_test
来运行目录中的所有测试,您可以执行类似的操作

java_test(
    name = "tests",
    srcs = glob(["*Test.java"]),
    deps = [ ..... ],
)

但这可能是正确的做法,也可能不是正确的做法。特别是,如果您只想运行一项测试或一种测试方法(例如使用

--test_filter
),bazel 仍将构建所有
java_test
的依赖项。另请注意,
glob
仅在构建包中全局使用,不会交叉到其他包中。


0
投票

这是一个老问题,但希望这个答案能帮助其他人解决这个问题。

现在在

contrib-rules-jvm
存储库中提供了 java_test_suite 规则。它具有方便的功能,例如:

  • 运行来源中提到的所有测试
  • 在测试文件夹中自动构建共享代码库
  • 支持 JUnit4 和 JUnit5
© www.soinside.com 2019 - 2024. All rights reserved.