在测试中使用 Java 模块化 (JPMS)
使用 TestNG 的示例
Surefire 项目提供了带有TestNG的集成测试,展示了 Java 模块化 (JPMS)。
JDK 版本必须为 9 或更高。POM 包含依赖项org.testng:testng:7.1.0
,它是一个自动模块。surefire-testng
它激活插件中的内部提供程序。使用带有断言API 的框架,即org.hamcrest:hamcrest:7.1.0
(自动模块)和org.assertj:assertj-core:3.16.1
(命名模块)。
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.release>${java.specification.version}</maven.compiler.release> </properties> <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.1.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest</artifactId> <version>2.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.16.1</version> <scope>test</scope> </dependency> </dependencies>
最重要的部分是模块描述符。这是位于的模块描述符src/main/java
:
module main { exports main; }
这是中的模块描述符src/test/java
:
module test { requires main; requires org.testng; requires org.hamcrest; requires org.assertj.core; exports test to org.testng; }
使用 JUnit4 的示例
Surefire 项目提供了 JUnit4 的集成测试,展示了 Java 模块化 (JPMS) 。
JDK 版本必须为 9 或更高。POM 包含依赖项junit:junit:4.13
,它是一个自动模块。它激活内部提供程序surefire-junit4
或surefire-junit47
在插件中。
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.release>${java.specification.version}</maven.compiler.release> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> <exclusions> <exclusion> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest</artifactId> <version>2.2</version> <scope>test</scope> </dependency> </dependencies>
最重要的部分是模块描述符。这是位于的模块描述符src/main/java
:
module main { exports main; }
这是中的模块描述符src/test/java
:
module test { requires main; requires junit; requires org.hamcrest; exports test to junit; }
使用 JUnit5 的示例
Surefire 项目提供了与JUnit5的集成测试,展示了 Maven 多模块项目中的 Java 模块化 (JPMS)。
JDK 版本必须为 9 或更高。org.junit.jupiter:junit-jupiter-engine:5.6.2
POM 包含名为模块的依赖项。surefire-junit-platform
它激活插件中的内部提供程序。
<artifactId>com.foo.impl</artifactId> <dependencies> <dependency> <groupId>com.foo</groupId> <artifactId>com.foo.api</artifactId> <version>3.0.0-M5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> </dependencies>
最重要的部分是模块描述符。这是位于的模块描述符src/main/java
:
module com.foo.impl { exports com.foo.impl; requires com.foo.api; requires org.slf4j; requires org.slf4j.simple; }
这是中的模块描述符src/test/java
:
open module com.foo.test { exports com.foo.implt; requires com.foo.impl; requires org.slf4j; requires org.slf4j.simple; requires transitive org.junit.jupiter.engine; requires transitive org.junit.jupiter.api; }