SpringMVC测试代码(MockMvc)
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)相关推荐
- SpringMVC 测试 mockMVC
SpringMVC测试框架 基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,即从URL请求到控制器处理,再到视图渲染都可以测试. 一 MockMvcBui ...
- Spring MVC学习总结(14)——SpringMVC测试框架之mockMVC详解
SpringMVC测试框架 基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,即从URL请求到控制器处理,再到视图渲染都可以测试. 一 MockMvcBui ...
- 如何编写Junit测试代码
一.环境准备: jdk1.7+,Junit4.9,Spring3.2.0. 二.测试代码部分: DataSynchReceiveServiceImpl.java package com.snt.aaa ...
- 测试代码发布到博客效果(Windows Live Writer发布)
测试代码发布到博客效果(Windows Live Writer发布) public class SwitchCase {/*** 1.switch后面的表达式为常量表达式,类型只能是可以转化为int. ...
- 【camera】自动泊车-基于深度学习的视觉车位检测项目(课程设计--训练代码、测试代码、部署demo)(2)
**基于深度学习的点定位回归和角度预测的车位检测 基于深度学习的点定位回归和角度预测 基于深度学习的角点检测和角度回归 ** 项目下载地址:训练代码.测试代码.部署demo 数据集百度网盘下载:数据集 ...
- 匿名函数应用-多线程测试代码
多线程测试代码,不用单独再写一个类,比较方面而已. public class MainThread { static int a=0; for (int x = 0;x<100;x++){ Th ...
- Windows/Linux TCP Socket网络编程简介及测试代码
典型的网络应用是由一对程序(即客户程序和服务器程序)组成的,它们位于两个不同的端系统中.当运行这两个程序时,创建了一个客户进程和一个服务器进程,同时它们通过从套接字(socket)读出和写入数据在彼此 ...
- FFmpeg在Windows上设置dshow mjpeg编码+libyuv解码显示测试代码
之前在https://blog.csdn.net/fengbingchun/article/details/103444891中介绍过在Windows上通过ffmpeg dshow设置为mjpeg编解 ...
- V4L2获取usb视频流测试代码
Video4Linux2(Video for Linux Two, 简称V4L2)是Linux中关于视频设备的驱动框架,为上层访问底层的视频设备提供统一接口.V4L2主要支持三类设备:视频输入输出设备 ...
最新文章
- 电脑故障维修:新手必看的修电脑技巧!
- C#中的结构和类之间的区别
- 配置环境JDK Tomcat Maven
- 飞鸽传书2008一种重要心态
- 信息学奥赛一本通C++语言——1055:判断闰年
- 创建标签等操作DOM的原生js API
- 性能优化的常见模式及趋势
- 计算机二级怎么让试题变简单,如何有效利用历年真题备考全国计算机等级考试?...
- 计算机专业y9000x,LEGION Y9000X笔记本U盘一键重装Win10专业版的教程
- 三国志战略版鸿蒙梦魇,三国志战略版梦中弑臣厉害吗 梦中弑臣战法搭配
- 【散文诗】STM32时钟框图
- PHP加密 php源代码在线加密工具推荐
- 保研保专硕计算机专业,如果保研只能保专硕,是否应该放弃保研自己考?
- vue 使用gsap(TweenMax)
- linux中断子系统(基于imx6ul arm32分析)
- 有效的数独 C++算法 leetcode36
- 扇形导航 html svg
- 2020年文档相似性算法:初学者教程
- 例25:求1+2!+3!+...+20!的和。
- 分享者最爱,全是限免软件,大佬们都是在这儿找的