使用@RepeatedTest可避免重复编写相同逻辑的@Test方法,支持指定次数、独立实例、序号命名、RepetitionInfo获取轮次信息、自定义显示名称、生命周期清理及动态控制重复次数。

用 @RepeatedTest 就行,不用写多个相同逻辑的 @Test 方法。
基础用法:指定重复次数
在测试方法上加 @RepeatedTest 注解,并传入整数参数,表示要执行多少次:
- 每次执行都会创建独立的测试实例,状态不共享
- 方法名会自动带上序号(如 “testWithRepeat(1/3)”),便于识别哪一轮失败
- 支持使用 RepetitionInfo 参数获取当前轮次和总次数
示例:
@RepeatedTest(3)
void testConnectionTimeout(RepetitionInfo repetitionInfo) {
System.out.println("第 " + repetitionInfo.getCurrentRepetition() +
" 次,共 " + repetitionInfo.getTotalRepetitions() + " 次");
assertTrue(NetworkUtil.isAvailable());
}
增强可读性:自定义显示名称
用 @DisplayNamePattern 或直接在 @RepeatedTest 中写模板字符串,让报告更清晰:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 支持占位符:
{displayName}、{currentRepetition}、{totalRepetitions} - 比如
@RepeatedTest(value = 5, name = "验证重试机制 [{currentRepetition}/{totalRepetitions}]")
配合生命周期控制:避免资源干扰
重复测试容易暴露资源未清理问题。建议搭配以下方式:
- 用 @BeforeEach 初始化干净状态(如清空内存缓存、重置 mock)
- 避免在测试方法内修改静态变量或共享单例状态
- 若涉及外部依赖(如临时文件、端口),可在 @AfterEach 中做清理
进阶技巧:动态决定重复次数
可通过系统属性或配置控制执行轮数,提升灵活性:
- 读取 JVM 参数:
Integer.parseInt(System.getProperty("test.repeats", "1")) - 结合 @EnabledIfSystemProperty 控制是否启用重复测试
- 适合 CI 环境跑多轮压力抽检,本地开发默认只跑 1 次

















