SpringMVC测试代码指的是不需要启动springmvc项目,就可以用测试代码访问Controller。

但是要注意: SpringMVC测试代码是基于SpringBoot环境下的, 所以项目必须用SpringBoot构建

注意:控制器层用SpringMVC测试代码(专业叫做MockMVC)

一、添加依赖包:

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.9</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.zyq</groupId><artifactId>mvc_test</artifactId><version>0.0.1-SNAPSHOT</version><name>mvc_test</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency>
​<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
​<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies>

二、设置编码:

# 执行测试时, 响应的json结果数据中如果包含中文,可能会出现乱码,需要在配置文件中配置编码
server.servlet.encoding.force=true
server.servlet.encoding.charset=utf-8
​
# yml文件中设置格式如下:
#server:
#    servlet:
#        encoding:
#            force:true
#            charset:utf-8

​三、AdminController.java

package com.zyq.mvcTest.controller;
​
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.Serializable;
​
@RestController
@RequestMapping(value = "/admins", produces = "application/json; charset=utf-8")
public class AdminController {
​// 注意:暂时使用@RequestMapping,不要使用@PostMapping,以便于直接在浏览器中测试// http://localhost:8080/admins/add-new?username=root&password=1234@PostMapping("/add-new")public JsonResult<Void> addNew(@Validated AdminSimpleVO AdminSimpleVO) {System.out.println("模拟业务层的注册代码::此处应该要调用" +"AdminServiceImpl的addnew()方法,保存用户:"+AdminSimpleVO);//adminService.addNew(AdminSimpleVO);return JsonResult.ok();}
​@RequestMapping("/login") // 暂时使用@RequestMapping,后续改成@PostMappingpublic JsonResult<AdminSimpleVO> login(@Validated AdminSimpleVO adminSimpleVO) {System.out.println("模拟业务层的登录代码::此处应该要调用" +"AdminServiceImpl的login()方法,验证用户信息:"+adminSimpleVO);//AdminSimpleVO adminSimpleVO = adminService.login(adminSimpleVO);return JsonResult.ok(adminSimpleVO);}
​
}
​
​
​
​
​
// Data Transfer Object
@Data
class AdminSimpleVO implements Serializable {private Long id;private String username;
​private String password;private Integer isEnable;private String nickname;private String avatar;private String phone;private String email;private String description;
​
}
​
​
​
​
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
class JsonResult<T> implements Serializable {
​// 状态码,例如:200private Integer state;// 消息,例如:"登录失败,用户名不存在"@JsonInclude(JsonInclude.Include.NON_NULL)private String message;// 数据@JsonInclude(JsonInclude.Include.NON_NULL)private T data;
​private JsonResult() {}
​public static JsonResult<Void> ok() {// JsonResult jsonResult = new JsonResult();// jsonResult.setState(1);// return jsonResult;return ok(null);}
​public static <T> JsonResult<T> ok(T data) {JsonResult<T> jsonResult = new JsonResult<>();jsonResult.setState(200);jsonResult.setData(data);return jsonResult;}
​public static JsonResult<Void> fail(int statusCode, String message) {JsonResult<Void> jsonResult = new JsonResult<>();jsonResult.setState(statusCode);jsonResult.setMessage(message);return jsonResult;}
​
}
​

四、测试代码:

注意:测试类必须写在项目根包下(因为要参与组件扫描,需要注入mockMvc等对象)

package com.zyq.mvcTest.controller;
​
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.http.MediaType;
import org.springframework.test.context.jdbc.Sql;
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;
​
@SpringBootTest
@AutoConfigureMockMvc // 自动配置MockMvc
public class AdminControllerTest {
​
​@Autowired(required = false)MockMvc mockMvc; // Mock单词意思是模拟
​//@Sql({"classpath:truncate.sql", "classpath:insert_data.sql"})@Testpublic void testLoginSuccessfully() throws Exception {// 准备测试数据,不需要封装String username = "admin001";String password = "123456";// 请求路径,不需要写协议、服务器主机和端口号String url = "/admins/login";// 执行测试// 以下代码相对比较固定mockMvc.perform(MockMvcRequestBuilders.post(url) // 根据请求方式决定调用的方法.contentType(MediaType.APPLICATION_FORM_URLENCODED) // 请求数据的文档类型,例如:application/json; charset=utf-8//  application/x-www-form-urlencoded;charset=UTF-8           .param("username", username) // 请求参数,有多个时,多次调用param()方法.param("password", password).accept(MediaType.APPLICATION_JSON)) // 接收的响应结果的文档类型,注意:perform()方法到此结束.andExpect( // 预判结果,类似断言MockMvcResultMatchers.jsonPath("state")//预判响应JSON结果中将有名为state的属性.value(200))//预判响应的JSON结果中名为state的属性的值,注意:andExpect()方法到此结束.andDo( // 需要执行某任务MockMvcResultHandlers.print()); // 打印日志}
}

SpringMVC测试代码(MockMvc)相关推荐

  1. SpringMVC 测试 mockMVC

    SpringMVC测试框架 基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,即从URL请求到控制器处理,再到视图渲染都可以测试. 一 MockMvcBui ...

  2. Spring MVC学习总结(14)——SpringMVC测试框架之mockMVC详解

    SpringMVC测试框架 基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,即从URL请求到控制器处理,再到视图渲染都可以测试. 一 MockMvcBui ...

  3. 如何编写Junit测试代码

    一.环境准备: jdk1.7+,Junit4.9,Spring3.2.0. 二.测试代码部分: DataSynchReceiveServiceImpl.java package com.snt.aaa ...

  4. 测试代码发布到博客效果(Windows Live Writer发布)

    测试代码发布到博客效果(Windows Live Writer发布) public class SwitchCase {/*** 1.switch后面的表达式为常量表达式,类型只能是可以转化为int. ...

  5. 【camera】自动泊车-基于深度学习的视觉车位检测项目(课程设计--训练代码、测试代码、部署demo)(2)

    **基于深度学习的点定位回归和角度预测的车位检测 基于深度学习的点定位回归和角度预测 基于深度学习的角点检测和角度回归 ** 项目下载地址:训练代码.测试代码.部署demo 数据集百度网盘下载:数据集 ...

  6. 匿名函数应用-多线程测试代码

    多线程测试代码,不用单独再写一个类,比较方面而已. public class MainThread { static int a=0; for (int x = 0;x<100;x++){ Th ...

  7. Windows/Linux TCP Socket网络编程简介及测试代码

    典型的网络应用是由一对程序(即客户程序和服务器程序)组成的,它们位于两个不同的端系统中.当运行这两个程序时,创建了一个客户进程和一个服务器进程,同时它们通过从套接字(socket)读出和写入数据在彼此 ...

  8. FFmpeg在Windows上设置dshow mjpeg编码+libyuv解码显示测试代码

    之前在https://blog.csdn.net/fengbingchun/article/details/103444891中介绍过在Windows上通过ffmpeg dshow设置为mjpeg编解 ...

  9. V4L2获取usb视频流测试代码

    Video4Linux2(Video for Linux Two, 简称V4L2)是Linux中关于视频设备的驱动框架,为上层访问底层的视频设备提供统一接口.V4L2主要支持三类设备:视频输入输出设备 ...

最新文章

  1. 电脑故障维修:新手必看的修电脑技巧!
  2. C#中的结构和类之间的区别
  3. 配置环境JDK Tomcat Maven
  4. 飞鸽传书2008一种重要心态
  5. 信息学奥赛一本通C++语言——1055:判断闰年
  6. 创建标签等操作DOM的原生js API
  7. 性能优化的常见模式及趋势
  8. 计算机二级怎么让试题变简单,如何有效利用历年真题备考全国计算机等级考试?...
  9. 计算机专业y9000x,LEGION Y9000X笔记本U盘一键重装Win10专业版的教程
  10. 三国志战略版鸿蒙梦魇,三国志战略版梦中弑臣厉害吗 梦中弑臣战法搭配
  11. 【散文诗】STM32时钟框图
  12. PHP加密 php源代码在线加密工具推荐
  13. 保研保专硕计算机专业,如果保研只能保专硕,是否应该放弃保研自己考?
  14. vue 使用gsap(TweenMax)
  15. linux中断子系统(基于imx6ul arm32分析)
  16. 有效的数独 C++算法 leetcode36
  17. 扇形导航 html svg
  18. 2020年文档相似性算法:初学者教程
  19. 例25:求1+2!+3!+...+20!的和。
  20. 分享者最爱,全是限免软件,大佬们都是在这儿找的

热门文章

  1. 邮件地址的正则表达式
  2. Chocolatey的安装和使用
  3. xml文档声明、处理指令、注释
  4. C语言nullptr错误,C/C++中的NULL与nullptr
  5. linux 分区的命名,Linux分区命名方案
  6. GitHub团队协同开发流程
  7. 0x80010105: 服务器出现意外情况
  8. Phtoshop五步制作水晶按钮
  9. 科大奥瑞物理实验——半导体封装实验
  10. 直播美颜技术:视频美颜sdk的快速集成与开发实践