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

MockMVC忽略@Order注解,测试方法执行顺序不符合预期

MockMVC测试中@Order注解未生效,测试方法按方法名字母顺序执行

MockMVC 忽略了@Order注解指定的执行顺序,转而按方法名的字母顺序执行测试。当第二个测试方法命名为test2_b时,它能按预期作为第二个方法执行,但将其重命名为test2后,尽管配置了@Order(2),该方法却成为最后一个执行的方法:

package com.javainuse.boot3security.test;

import org.junit.jupiter.api.Order;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.web.servlet.MockMvc;
import com.javainuse.boot3security.repository.DadosPessoaisRepository;

@SpringBootTest
@AutoConfigureMockMvc
class ClassTest {

    @Autowired
    MockMvc mockMvc;

    @MockBean
    private DadosPessoaisRepository dadosPessoaisRepository;

    @Order(1)
    @Test
    public void test1_a() throws Exception {
        System.out.println("Test1");    
    }

    @Order(2)
    @Test
    public void test2() throws Exception {
        System.out.println("Test2");        
    }

    @Order(3)
    @Test
    public void test3_c() throws Exception {
        System.out.println("Test3");        
    }   
    

    @Order(4)
    @Test
    public void test4_d() throws Exception {
        System.out.println("Test4");
    }
}

执行输出:

Test1
Test3
Test4
Test2

问题原因与解决方案

原因

JUnit 5 默认不会通过@Order注解控制测试方法的执行顺序,默认策略是按方法名字典序执行,因此@Order注解会被忽略。

解决方案

在测试类上添加@TestMethodOrder(MethodOrderer.OrderAnnotation.class)注解,显式指定使用@Order注解控制执行顺序。

修复后的测试类代码:

package com.javainuse.boot3security.test;

import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.web.servlet.MockMvc;
import com.javainuse.boot3security.repository.DadosPessoaisRepository;

@SpringBootTest
@AutoConfigureMockMvc
@TestMethodOrder(OrderAnnotation.class) // 新增注解,启用Order排序
class ClassTest {

    @Autowired
    MockMvc mockMvc;

    @MockBean
    private DadosPessoaisRepository dadosPessoaisRepository;

    @Order(1)
    @Test
    public void test1_a() throws Exception {
        System.out.println("Test1");    
    }

    @Order(2)
    @Test
    public void test2() throws Exception {
        System.out.println("Test2");        
    }

    @Order(3)
    @Test
    public void test3_c() throws Exception {
        System.out.println("Test3");        
    }   
    

    @Order(4)
    @Test
    public void test4_d() throws Exception {
        System.out.println("Test4");
    }
}

添加该注解后,测试方法将严格按照@Order指定的顺序执行,输出结果会变为:

Test1
Test2
Test3
Test4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:10:23