JUnit测试方法未按@Order注解指定顺序执行,求排查问题
问题原因及解决办法
你的代码存在JUnit版本注解混用+类名冲突的问题,直接导致排序注解完全失效:
- 注解版本不匹配:你用了JUnit 5(Jupiter)的
@TestMethodOrder、@Order注解,但测试方法上的@Test却是JUnit 4的org.junit.Test。JUnit 4的执行引擎根本识别不了JUnit 5的排序规则,所以测试还是按JUnit 4的默认逻辑——方法名字典序执行,也就是test1→test2→test3→test4的顺序。 - 类名冲突:测试类命名为
Order,和导入的org.junit.jupiter.api.Order注解类同名,这会干扰注解的识别逻辑,进一步加剧问题。
修复步骤
- 把JUnit 4的
@Test替换为JUnit 5的org.junit.jupiter.api.Test注解 - 修改测试类名称,比如改成
OrderedTest,避免和注解类重名 - 确保项目依赖中已正确引入JUnit 5的核心包(junit-jupiter-api、junit-jupiter-engine)
修复后的代码示例:
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; @TestMethodOrder(OrderAnnotation.class) public class OrderedTest { @Test @Order(4) public void test1() { System.out.println("This is test 1"); } @Test @Order(3) public void test2() { System.out.println("This is test 2"); } @Test @Order(2) public void test3() { System.out.println("This is test 3"); } @Test @Order(1) public void test4() { System.out.println("This is test 4"); } }
修复后执行,输出会按照@Order指定的顺序显示:
This is test 4 This is test 3 This is test 2 This is test 1
内容的提问来源于stack exchange,提问作者adarsh sasi
相关产品推荐
相关产品推荐

