我一直在尝试使用 Bazel 运行目录中的所有 JUnit 测试。据我所知,
java_test
规则只能运行特定的类。但是,我正在寻找更像 mvn test
的行为,它运行项目中的所有 JUnit 测试。我怎样才能做到这一点?
组织此操作的典型方法是为每个 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
仅在构建包中全局使用,不会交叉到其他包中。
这是一个老问题,但希望这个答案能帮助其他人解决这个问题。
现在在
contrib-rules-jvm存储库中提供了
java_test_suite
规则。它具有方便的功能,例如: