使用MockMvc进行Spring的单元测试

本文探讨了以往Spring Controller层单元测试的局限性,如只能通过浏览器测试,所有请求返回200状态码,且无法测试非GET请求。接着介绍了MockMvc的优势,它允许直接对Controller进行单元测试,覆盖各种HTTP方法,详细介绍了引入依赖和创建测试类的步骤。

一、以往controller层的单元测试(只能使用浏览器测试)

弊端:

1.对于所有请求,无论是否成功,都返回200的状态码。

2.无法测试post、put、delete请求,只能测试get请求。

二、使用MockMvc进行单元测试

好处:

    1.对于不同请求类型返回不同状态码

    2.可以测试Restful的各种请求(get、post、put、delete等)

用法:

1.引入依赖

<!-- spring测试框架 -->
<dependency>   
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

2.建立测试类

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.fileUpload;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;


import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserControllerTest {

    @Autowired
    private WebApplicationContext wac;
    private MockMvc mockMvc;

    @Before
    public void setup(){
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
    }

    @Test
    public void whenQuerySeccess() throws Exception{
        mockMvc.perform(
                get("/user")
                        .param("username","mike")
                        .param("age","18")
                        .param("ageTo","60")
                        .param("xxx","yyy")
                        //1.发送get请求,并带请求参数
                .contentType(MediaType.APPLICATION_JSON_UTF8) //2.编码格式为json的utf8
        ).andExpect(status().isOk())  //3.判断返回的状态码是否为200 OK
                .andExpect(jsonPath("$.length()").value(3))  //4.判断返回的json长度是否为3
                .andReturn().getResponse().getContentAsString();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值