本文目录#
测试面临的挑战#
- 模块封装导致默认无法访问非导出包;
- 反射测试需要
opens
; - 多模块项目的依赖树与启动配置更复杂。
单元测试策略#
- 测试模块:为测试代码创建独立模块(如
module com.example.tests { requires com.example.core; }
)。 - open module:在被测模块使用
open module
或opens
给特定包以允许反射(JUnit、Mockito)。 - 测试运行器配置:Maven Surefire/Gradle Test 需要传入
--module-path
、--add-opens
参数。 - 服务测试:对
provides/uses
服务进行集成测试,测试模块通过 ServiceLoader 验证实现。
示例配置(Maven)#
1 | <plugin> |
集成测试#
- 使用
jlink
打包模块化运行时,执行端到端测试; jdeps
分析测试覆盖的依赖;- 利用 Testcontainers 或模块化 Mock 服务验证跨模块交互。
自检清单#
- 是否为测试开放必要包且遵循最小暴露原则?
- 是否配置构建工具在测试时正确传入模块参数?
- 是否验证服务提供者在模块模式下的可见性?
参考资料#
- JPMS 官方教程:https://docs.oracle.com/javase/9/migrate/toc.htm
- Maven Surefire 模块化指南:https://maven.apache.org/surefire/maven-surefire-plugin/examples/modulepath.html
- Gradle + JPMS 测试示例:https://docs.gradle.org/current/userguide/java_module_projects.html
本作品系原创,采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,转载请注明出处。