You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于JUnit实现外部公共库定义的通用测试跨项目复用?

JUnit实现公共测试库的方案

直接按以下步骤操作即可实现公共测试复用,引入依赖后自动和项目自有测试一同运行,分JUnit 5和JUnit 4两种场景:

一、JUnit 5(推荐方案)

JUnit 5的测试自动发现机制对该场景适配性更高,操作如下:

  • 第一步:创建独立的公共测试模块,所有通用合规校验、架构测试(比如禁止特定类引用的规则、ArchUnit架构校验)统一写在模块的src/main/java目录下,注意不要放在src/test目录,否则打包时不会写入jar包,业务项目引入后无法识别
  • 第二步:如果需要给不同项目做差异化配置(比如配置校验排除的类路径),可以给公共测试类加可配置的静态参数setter,或者使用JUnit 5的@ConfigurationParameter注解,业务项目可直接在junit-platform.properties中传参配置
  • 第三步:将公共测试模块打包发布到内部私服,业务项目引入该依赖到测试作用域,Maven配置示例如下:
<dependency>
    <groupId>com.yourteam</groupId>
    <artifactId>common-test-rule</artifactId>
    <version>1.0.0</version>
    <scope>test</scope>
</dependency>
  • 第四步:有两种方式实现公共测试自动发现,二选一即可:
    1. 业务项目在src/test/resources/junit-platform.properties中配置扫描范围,同时覆盖公共测试包和业务自身测试包:
    junit.platform.discovery.classpath.include.packages = com.yourteam.common.test,com.your.biz.project
    
    1. 无需业务项目额外配置,在公共测试模块的src/main/resources/META-INF/services/下创建名为org.junit.platform.engine.DiscoverySelector的文件,逐行写入所有公共测试类的全限定名,JUnit 5启动时会自动通过SPI机制发现并加载这些测试。

二、JUnit 4 兼容方案

如果存量项目仍使用JUnit 4,通过Suite测试套件实现即可:

  • 第一步:和上述步骤一致,将公共测试类写在公共模块的src/main/java目录下
  • 第二步:公共模块内定义统一的公共测试套件,关联所有通用测试类:
@RunWith(Suite.class)
@Suite.SuiteClasses({
    ForbiddenClassUseTest.class,
    ArchitectureComplianceTest.class,
    TeamRuleCheckTest.class
})
public class CommonTestSuite {}
  • 第三步:业务项目引入公共依赖后,在自身的测试套件中引入公共套件类即可,示例如下:
@RunWith(Suite.class)
@Suite.SuiteClasses({
    CommonTestSuite.class,
    BizOwnTest1.class,
    BizOwnTest2.class
})
public class BizProjectTestSuite {}

执行业务测试套件时,会自动顺序执行所有公共测试和业务自有测试。


额外提示

如果是架构规范类测试,推荐搭配ArchUnit框架封装,规则编写成本更低,也可以直接把ArchUnit的规则类封装到公共库,适配上述两种JUnit版本的执行逻辑。

内容的提问来源于stack exchange,提问作者Reodont

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:45:04