在 GitHub 上叉我

在测试中使用 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-junit4surefire-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.2POM 包含名为模块的依赖项。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;
}