【发布时间】:2020-04-01 20:55:54
【问题描述】:
我一直在尝试使用 Bazel 在一个目录中运行所有 JUnit 测试。据我所知,java_test 规则只能运行特定的类。但是,我正在寻找更像 mvn test 的行为,它运行项目中的所有 JUnit 测试。我怎样才能做到这一点?
【问题讨论】:
我一直在尝试使用 Bazel 在一个目录中运行所有 JUnit 测试。据我所知,java_test 规则只能运行特定的类。但是,我正在寻找更像 mvn test 的行为,它运行项目中的所有 JUnit 测试。我怎样才能做到这一点?
【问题讨论】:
典型的组织方式是为每个 Java 测试类或每组相关的 Java 测试类设置一个 java_test 规则。然后 java_tests 可以使用 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 的依赖项。另请注意,globs 仅在构建包中全局化,不会跨越到其他包中。
【讨论】:
glob 运行目录中的所有测试,我会得到cannot determine test class。但是,我真的只是希望它在当前包中运行所有带有 @Test 注释的测试。有什么建议吗?
test_class 属性中指定)。看看这里的解决方案:stackoverflow.com/questions/46365464