如何配置 surefire 插件,使其可以 运行 非 public 测试 类?

How to configure surefire plugin, so it could run non-public test classes?

假设这些工具用于 运行maven 项目中的测试:

请找到最小示例here

该项目包含一个 java 模块(java 11maven 3.6.1)。

使用此设置,典型的成功测试如下所示:

public class SampleTest {
  @Test
  public void test() {
    assertEquals(1, 1);
  }
}

我想避免对所有测试方法和测试 类 使用 public,因为它只会产生视觉噪音。不幸的是,删除 public 可见性后,测试无法启动。

class SampleTest {
  @Test
  void test() {
    assertEquals(1, 1);
  }
}

mvn test

...
java.lang.reflect.InaccessibleObjectException: 
  Unable to make org.sample.SampleTest.test() accessible:
  module sample.core does not "opens org.sample" to unnamed module @7d9d1a19

请帮我找到一个正确的方法来配置 surefire 插件,这样它就可以 运行 测试而不需要 public 到处都是。

如果需要,更改 surefire 和 junit 的版本 - 它们在这里只是为了清楚起见。

我在以下时间通过了您的测试:

  1. 将 Java 包 com.sample 重命名为 com.sample1 src/test/java
  2. 然后在src/test/java
  3. 中添加了模块-info.java

查看src/test/java/module-info.java

的内容
open module test.module {
    requires sample.module;
    requires transitive org.junit.jupiter.engine;
    requires transitive org.junit.jupiter.api;
}

我知道您想在两个模块中使用相同的 Java 包(src/main/javasrc/test/java ) 但在 JPMS 中是不可能的,AFAIK。 从 JUnit 5.7 或其他版本开始,关键字“open”是必需的,如果删除它会失败:

module test.module does not "opens com.sample1" to module org.junit.platform.commons