Springboot项目:使用MockMvc测试get和post接口(含单个和多个请求参数场景)

一、引入MockMvc依赖

使用MockMvc,必须要引入依赖

复制代码
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

二、具体演示

1、GET请求(单个参数)

测试类代码

复制代码
@ExtendWith(MockitoExtension.class)
class AppControllerTest {

    private MockMvc mockMvc;

    @Mock
    private IDB2PatrolResultService idb2PatrolResultService;
    @InjectMocks
    private DB2PatrolResultController db2PatrolResultController;

    @BeforeEach
    void setUp() {
        this.mockMvc = MockMvcBuilders.standaloneSetup(db2PatrolResultController).build();
    }

    @Test
    void testGet() throws Exception {
        this.mockMvc.perform(MockMvcRequestBuilders.get("/dbm/patrolResult/trigger/{itemCode}","121"))
            .andExpect(status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    }
}

controller类代码

复制代码
	@GetMapping("/trigger/{itemCode}")
    public R<Void> execSchedule(@PathVariable("itemCode") String itemCode) {
        return patrolResultService.execSchedule(itemCode);
    }

2、GET请求(多个参数)

测试类代码:

复制代码
@ExtendWith(MockitoExtension.class)
class AppControllerTest {

    private MockMvc mockMvc;

    @Mock
    private IDB2PatrolResultService idb2PatrolResultService;
    @InjectMocks
    private DB2PatrolResultController db2PatrolResultController;

    @BeforeEach
    void setUp() {
        this.mockMvc = MockMvcBuilders.standaloneSetup(db2PatrolResultController).build();
    }

    @Test
    void testPatrolResult() throws Exception {
        PatrolQueryConfig patrolQueryConfig = new PatrolQueryConfig();
        patrolQueryConfig.setItemLevel("0");
        patrolQueryConfig.setStatusType("0");
        String jsonStr = JSONUtil.toJsonStr(patrolQueryConfig);
        this.mockMvc.perform(MockMvcRequestBuilders.get("/dbm/patrolResult/list")
                .param("itemLevel","1")
                .param("statusType","2"))
            .andExpect(status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    }
}

controller类代码

复制代码
	@GetMapping("/list")
    public TableDataInfo<PatrolResult> getRunStatsDataAggs(PatrolQueryConfig patrolQueryConfig) {
        List<PatrolResult> patrolResults = patrolResultService.getPatrolHisResultAggs(patrolQueryConfig);
        return TableDataInfo.build(patrolResults);
    }

3、POST请求(多个参数)

测试类代码

复制代码
@ExtendWith(MockitoExtension.class)
class AppControllerTest {

    private MockMvc mockMvc;

    @Mock
    private IDB2PatrolResultService idb2PatrolResultService;
    @InjectMocks
    private DB2PatrolResultController db2PatrolResultController;

    @BeforeEach
    void setUp() {
        this.mockMvc = MockMvcBuilders.standaloneSetup(db2PatrolResultController).build();
    }

    @Test
    void testPost() throws Exception {
        PatrolQueryConfig patrolQueryConfig = new PatrolQueryConfig();
        patrolQueryConfig.setItemLevel("0");
        patrolQueryConfig.setStatusType("0");
        String jsonStr = JSONUtil.toJsonStr(patrolQueryConfig);
        this.mockMvc.perform(MockMvcRequestBuilders.post("/dbm/patrolResult/list")
                .contentType(MediaType.APPLICATION_JSON_VALUE)
                .content(jsonStr)
                .header(HttpHeaders.ACCEPT,"application/json"))
            .andExpect(status().isOk())
            .andDo(MockMvcResultHandlers.print())
            .andReturn();
    }
}

controller类代码

复制代码
	@PostMapping("/list")
    public TableDataInfo<PatrolResult> getRunStatsDataAggs(@RequestBody PatrolQueryConfig patrolQueryConfig) {
        List<PatrolResult> patrolResults = patrolResultService.getPatrolHisResultAggs(patrolQueryConfig);
        return TableDataInfo.build(patrolResults);
    }

三、总结

  • 使用MockMvc可以做到controller层的测试。
  • 在初始化mockMvc的时候:
    (1)如果想测试单个controller
    mockMvc = MockMvcBuilders.standaloneSetup(mockMvcController).build();
    (2)如果想测试所有controller
    mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
相关推荐
zhengzizhe6 分钟前
ReBAC 与 Google Zanzibar:权限系统的未来
后端·架构
用户83562907805112 分钟前
使用 Python 自动创建 Excel 折线图
后端·python
梅兮昂21 分钟前
Cloudflare Tunnel 实践教程
后端
@杰克成24 分钟前
Java学习26
java·学习·idea
倒流时光三十年25 分钟前
PostgreSQL VACUUM 清理机制详解
后端
伏加特遇上西柚1 小时前
Loki+Alloy+Grafana日志采集部署
java·linux·服务器·spring boot·grafana·prometheus
阿丘Akiu1 小时前
Linux部署我的世界服务器
java
折哥的程序人生 · 物流技术专研1 小时前
《Java面试85题图解版(二)》进阶深化中篇:Spring核心 + 数据库进阶
java·后端·spring·面试
TeamDev1 小时前
在 Excel 加载项中嵌入 Web 视图
前端·后端·.net
Mr_愚人派1 小时前
redis_点评详解(02.短信登录-验证码登录注册)
后端