SpringBoot 使用MockMvc 进行单元测试

本文详细介绍如何使用SpringBoot脚手架快速创建项目,并引入关键依赖。通过实例演示了Controller的创建与各种请求处理,包括GET和POST请求,以及如何通过JSON传递数据。此外,还提供了测试工具类的编写方法,确保项目的功能正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、利用springBoot 脚手架创建一个springBoot项目(地址:start.spring.io)

 

二、引入相关依赖

	<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.58</version>
		</dependency>

三、新建一个Controller包,写一个测试的Controller

 

package com.gpdi.controller;
import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
@RestController
public class UserController {
    /**
     *
     * @param
     *         name 用户姓名
     *         request Http对象
     *
     * @return String
     *
     */
    @GetMapping(value = "getStringByName")
    public String getStringByName(String name,HttpServletRequest request) {

        return "Hello," + name+" ,今天是"+request.getAttribute("date");
    }


    @GetMapping(value = "getStringByPassString")
    public String getStringByPassString(HttpServletRequest request) {
        Object name=request.getAttribute("name");
        return "Hello," + name;
    }

    @PostMapping(value = "getString")
    public String getString() {
        return "talk with friend";
    }

    @GetMapping(value = "getList")
    public List getList() {
        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        return list;
    }
    @PostMapping(value = "passByJson")
    public String passByJson(@RequestBody JSONObject jsonParam){

        String name=jsonParam.getString("name");
        int id=jsonParam.getInteger("id");
        System.out.println("id"+id+"name  "+name);
        return jsonParam.toJSONString();
    }
}

四、建立测试工具类

     

package com.gpdi;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.gpdi.controller.UserController;
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.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class BatteryThreadApplicationTests {

    @Autowired
    private WebApplicationContext context;

    private MockMvc mockMvc;

    private ObjectMapper mapper = new ObjectMapper();

    @Before
    public void setupMockMvc() throws Exception {
        mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
    }


    /**
     * @description:不含参数的get请求 return 返回一个List集合
     */

    @Test
    public void testList() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/getList")).andDo(MockMvcResultHandlers.print());

    }

    /**
     * @description: 通过Attribute 传递参数
     * param String name
     */

    @Test
    public void getStringByPassString() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders
                //设置请求方法类型和方法名称
                .get("/getStringByPassString")
                //设置请求的参数
                .requestAttr("name", "whs"))
                .andDo(MockMvcResultHandlers.print());

    }

    /**
     * param:  通过Http设置param参数
     */
    @Test
    public void getStringByName() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders
                //设置请求方法类型和方法名称
                .get("/getStringByName")
                //设置请求的参数
                .requestAttr("date", "2019年8月2号")
                //通过设置http对象的参数信息
                .param("name", "whs")
        ).andDo(MockMvcResultHandlers.print());

    }

    /**
     * @description: 传递一个json类型的数据进行测试
     */
    @Test
    public void passByJson() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.post("/passByJson")
                //设置传输的媒体类型
                .contentType(MediaType.APPLICATION_JSON_UTF8)
                //设置传输的字段
                .content("{\"name\":\"wwww\",\"id\":\"1\"}")

        )
                //     .andExpect(MockMvcResultMatchers.status().isOk())
                //     .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8))
                .andDo(MockMvcResultHandlers.print());

    }


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值