温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样测试java Module模块

发布时间:2026-10-30 18:41:55 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

在 Java 9 及以后版本中引入了 Java Platform Module System(JPMS),也就是常说的 Java Module(模块)。测试 Java Module 可以从编译、运行、单元测试、模块边界验证几个方面来进行。下面系统地说明。


一、准备一个最简单的 Module 示例

1. 目录结构

demo/
├── src/
│   └── com.example.hello/
│       ├── module-info.java
│       └── com/example/hello/Hello.java
└── test/
    └── com.example.hello/
        └── com/example/hello/HelloTest.java

2. module-info.java

module com.example.hello {
    exports com.example.hello;
}

3. Hello.java

package com.example.hello;

public class Hello {
    public String say() {
        return "Hello Module";
    }
}

二、使用 javac / java 测试模块(基础验证)

1. 编译模块

javac -d out/src \
  src/com.example.hello/module-info.java \
  src/com.example.hello/com/example/hello/Hello.java

2. 运行模块

java --module-path out/src \
     --module com.example.hello/com.example.hello.Hello

如果没有 main 方法,可以单独写测试类或单元测试。


三、使用 JUnit 测试 Java Module(推荐)

方式一:模块内测试(最简单)

test/module-info.java

module com.example.hello {
    exports com.example.hello;
    requires junit.jupiter.api;
}

使用 JUnit 5 测试

package com.example.hello;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class HelloTest {
    @Test
    void testSay() {
        assertEquals("Hello Module", new Hello().say());
    }
}

编译并运行:

javac -d out/test --module-path out/src:junit.jar \
  test/com.example.hello/module-info.java \
  test/com.example.hello/com/example/hello/HelloTest.java

java --module-path out/src:out/test:junit.jar \
     --add-modules junit.platform.console \
     org.junit.platform.console.ConsoleLauncher \
     --select-package com.example.hello

四、使用 Maven 测试 Module(最常用)

1. Maven 模块结构

hello-module/
├── pom.xml
└── src/
    ├── main/java/
    │   ├── module-info.java
    │   └── com/example/hello/Hello.java
    └── test/java/
        └── com/example/hello/HelloTest.java

2. pom.xml(关键配置)

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.11.0</version>
  <configuration>
    <release>17</release>
  </configuration>
</plugin>

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>3.1.2</version>
</plugin>

3. 运行测试

mvn test

✅ Maven 会自动处理模块路径(module-path)


五、测试模块边界(重点)

1. 测试“未导出包不可访问”

// 另一个模块尝试访问
import com.example.hello.Hello; // OK

import com.example.hello.internal.Secret; // 编译失败

2. 使用 --add-exports 临时测试

java --add-exports com.example.hello/com.example.hello.internal=ALL-UNNAMED

⚠️ 仅用于测试,不建议生产使用


六、常见测试工具支持情况

工具 是否支持 Module
JUnit 5 ✅
Maven ✅
Gradle ✅(需 Java 9+)
Mockito ✅(需要 opens)
JaCoCo ✅

七、调试与验证命令

# 查看模块依赖
java --module-path out/src --list-modules

# 查看模块描述
java --describe-module com.example.hello

总结

测试 Java Module 的核心方法:

  1. 使用 javac + java 手动验证
  2. 使用 JUnit 5 进行单元测试
  3. Maven / Gradle 自动管理 module-path
  4. 重点测试模块边界与访问控制

如果你有具体场景(如:Spring Boot + Module、微服务、老项目迁移),我可以给你更针对性的测试方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手