JUnit 5 中必须配合 @TestMethodOrder(OrderAnnotation.class) 使用 @Order 注解,否则无效;@Order(n) 按数值升序执行,未标注者排最后;支持与条件注解共存,但不适用于 @ParameterizedTest 子项或 @TestFactory。

JUnit 5 中不能直接用 @Order 注解控制执行顺序,必须配合 @TestMethodOrder(OrderAnnotation.class) 类级注解一起使用,否则 @Order 会被忽略。
必须先开启有序执行模式
JUnit 5 默认不保证测试方法执行顺序。要启用基于数字优先级的排序,需在测试类上显式声明:
- 添加
@TestMethodOrder(MethodOrderer.OrderAnnotation.class) - 该注解支持继承,可放在父类或接口上统一管理
- 若未声明此注解,即使方法上有
@Order(1)也不会生效
给测试方法标注执行序号
在每个 @Test 方法上使用 @Order(n),n 为整数,数值越小越先执行:
-
@Order(1)→ 第一个执行 -
@Order(2)→ 第二个执行 - 未标注
@Order的方法默认排在最后(不是按字母顺序) - 允许跳号,比如只用
@Order(1)和@Order(100),中间无冲突
注意与其他注解的兼容性
@Order 可与条件执行注解共存,但顺序判定优先于条件判断:
- 例如
@Order(1) @EnabledOnOs(OS.WINDOWS):先按序号排队,再检查系统条件是否满足 - 若当前系统不满足
@EnabledOnOs,该方法会被跳过,但不影响其他带@Order方法的相对顺序 - 不支持在
@ParameterizedTest的单个参数化子项上单独设@Order,整个参数化方法视为一个单元
常见误区提醒
容易出错的地方:
- 误写成
@Order单独使用 —— 编译通过但无效 - 把
@Order用在非@Test方法上(如@BeforeEach)—— 不起作用 - 混淆
@Order(JUnit Jupiter)和 Spring 的@Order(用于 Bean 排序)—— 两者无关 - 期望
@Order控制@TestFactory生成的动态测试顺序 —— 动态测试需手动排序,不响应该注解


















