如何配置 surefire 插件,使其可以 运行 非 public 测试 类?
How to configure surefire plugin, so it could run non-public test classes?
假设这些工具用于 运行maven 项目中的测试:
org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5
默认配置
org.junit.jupiter:junit-jupiter-engine:5.7.0
请找到最小示例here。
该项目包含一个 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 的版本 - 它们在这里只是为了清楚起见。
我在以下时间通过了您的测试:
- 将 Java 包 com.sample 重命名为 com.sample1 src/test/java
- 然后在src/test/java
中添加了模块-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/java 和 src/test/java ) 但在 JPMS 中是不可能的,AFAIK。
从 JUnit 5.7 或其他版本开始,关键字“open”是必需的,如果删除它会失败:
module test.module does not "opens com.sample1" to module org.junit.platform.commons
假设这些工具用于 运行maven 项目中的测试:
org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5
默认配置org.junit.jupiter:junit-jupiter-engine:5.7.0
请找到最小示例here。
该项目包含一个 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 的版本 - 它们在这里只是为了清楚起见。
我在以下时间通过了您的测试:
- 将 Java 包 com.sample 重命名为 com.sample1 src/test/java
- 然后在src/test/java 中添加了模块-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/java 和 src/test/java ) 但在 JPMS 中是不可能的,AFAIK。 从 JUnit 5.7 或其他版本开始,关键字“open”是必需的,如果删除它会失败:
module test.module does not "opens com.sample1" to module org.junit.platform.commons