java—如何配置surefire插件,使其能够运行非公共测试类?

5cg8jx4n  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(442)

假设这些工具用于在maven项目中运行测试: org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5 使用默认配置 org.junit.jupiter:junit-jupiter-engine:5.7.0 请在这里找到最简单的例子。
该项目由一个java模块组成( java 11 , maven 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的版本-它们只是为了清晰起见。

cgyqldqp

cgyqldqp1#

我通过了你的测试:
在src/test/java中将java包com.sample重命名为com.sample1
然后在src/test/java中添加module-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;
}

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

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

相关问题