日常啰嗦
承接前一篇文章《Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例》,已经讲解了dao层和service层的单元测试,还有控制器这层也不能漏掉,因此本篇会讲一下MockMvc,及controller控制层的单元测试,相关代码已上传,可自行下载。
我的github地址
为什么使用MockMvc?
可能我们在测试控制层的代码都是启动服务器,在浏览器中输入URL,然后开始测试是否达到预期效果,发生错误的话,修改相关代码并重启服务器再次进行测试。分析一下这个过程,启动服务器-->打开浏览器-->输入URL-->等待返回结果-->修复bug-->重启服务器.....循环。
其中的缺点也挺明显的,在浏览器输入URL的地址,如果是GET请求还好,POST请求或者DELETE请求怎么办?只能借助其他工具,通过命令行编写curl语句,或者借助谷歌浏览器的postman插件,亦或者自己在代码中通过编写相应httpClient方法来实现测试,但是这几种方法都较为麻烦,而且测试用例并不能较好的保存。再说一个缺点,代码修改后,往往需要再次重启服务器,等待启动完毕才能接下来的测试过程。
如果tomcat服务器启动速度较慢,这将是一件非常痛苦的事情,测试验证也不方便,且依赖网络环境,这些原因导致测试起来很麻烦,而为了可以方便对Controller进行测试,且很好的保存和循环使用测试用例,则可以通过单元测试来解决,通过前面一篇文章,大家对于单元测试的便利性有了认识和体会,接下来通过引入MockMVC进行控制层的单元测试。
MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。
MockMvc单元测试实例
MockMvc测试过程:
1、创建请求
2、设置参数(这一步其实可以设置很多参数,MockMvc提供了丰富的方法,但是本例中只是简单的参数设置,因为方法都较简单,并没有复杂的调用)
3、mockMvc调用perform,调用controller的业务处理逻辑
4、perform返回ResultActions,返回操作结果,通过ResultActions,提供了统一的验证方式。
测试代码在test包中,也已经传到github上,可以下载到本地运行测试。
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration({"classpath*:/applicationContext.xml", "classpath*:/spring-mvc.xml", "classpath*:/mybatis-config.xml"})
public class BookControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = webAppContextSetup(this.wac).build();
}
@Test
public void testList() throws Exception {
//创建书籍列表的请求
//请求方式为get
MockHttpServletRequestBuilder mockHttpServletRequestBuilder = MockMvcRequestBuilders.get("/book/listAll.do");
//此请求并不需要添加请求参数 mockMvc.perform(mockHttpServletRequestBuilder).andExpect(status().isOk())
.andDo(print());
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration({"classpath*:/applicationContext.xml", "classpath*:/spring-mvc.xml", "classpath*:/mybatis-config.xml"})
@TransactionConfiguration(defaultRollback = false)
@Transactional
public class StoreControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = webAppContextSetup(this.wac).build();
}
@Test
public void testSave() throws Exception {
//创建书架创建的请求
//请求方式为post
MockHttpServletRequestBuilder mockHttpServletRequestBuilder = MockMvcRequestBuilders.post("/store/save.do");
//添加编号为MockMvc的书架
mockHttpServletRequestBuilder.param("number", "MockMvc");
//书架为两层
mockHttpServletRequestBuilder.param("level", "2");
mockMvc.perform(mockHttpServletRequestBuilder).andExpect(status().isOk())
.andDo(print());
}
@Test
public void testList() throws Exception {
//创建书架创建的请求
//请求方式为post
MockHttpServletRequestBuilder mockHttpServletRequestBuilder = MockMvcRequestBuilders.post("/store/list.do");
//有些参数我注释掉了,你可以自行添加相关参数,得到不同的测试结果
//status为0的记录
//mockHttpServletRequestBuilder.param("status", "0");
//书架编号为dd的记录
//mockHttpServletRequestBuilder.param("number", "dd");
//第一页
mockHttpServletRequestBuilder.param("page", "1");
//每页10条记录
mockHttpServletRequestBuilder.param("rows", "10");
mockMvc.perform(mockHttpServletRequestBuilder).andExpect(status().isOk())
.andDo(print());
//控制台会打印如下结果:
//MockHttpServletResponse:
//Status = 200 即为后端成功相应
//返回数据
}
}
总结
如果你还是习惯于启动tomcat服务器,然后在浏览器中输入地址测试的话,也未尝不可,方法在上面,已经写好了,使不使用还是要看个人习惯的。
以上的测试都是针对本项目的简单测试,应该都不是很复杂,很容易上手的,后面如果有复杂的测试的话,再进行深入的讲解,想要深入了解SpringMVC的MockMvc测试的话可以自行搜索相关教程。
相关推荐
● 实现方法: 使用MySQL 建立数据库。服务端使用SSM框架(Spring+SpringMVC+MyBatis)+shiro+Maven,使用Myeclipse进行开发。前端使用MUi和HUI框架和vue(与后台交互模板)和Html5+css3来实现移动端App的开发。
开发技术:Spring+SpringMVC+MyBatis+EasyUI 功能描述: 移动端:校园动态浏览,评论,点赞,删除(管理员),添加(管理员) 校园活动圈的浏览,加入,删除(管理员),发布(管理员) 账号设置,头像设置,...
除了SpringMVC和EasyUI,此项目可能还使用了其他技术,如Spring Boot、MyBatis或Hibernate作为持久层框架,Spring Security或Shiro进行权限控制,以及Log4j或Logback进行日志管理。这些技术的结合使用,构建了一个...
在本项目中,“easyUI_SSM增删改查(包含服务器端分页)”是一个基于Java Web技术的实践案例,主要展示了如何使用Spring、SpringMVC和MyBatis(SSM)框架集成,并结合easyUI前端框架实现学生信息管理系统的功能,...
8. **测试**:Spring Boot的Test模块支持单元测试和集成测试,确保代码质量。 综上所述,Spring Boot和Spring MVC的结合,为酒店管理系统提供了强大的后端支持,通过合理的设计和配置,可以构建出高效、稳定的业务...
socket工具类,权限组件,菜单组件,jdbc分页支持多种数据库,ant路径工具类,增加jquery easyUI 1.0.9 版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 ...
用到相关的技术: Spring、springmvc、mybatis、MUI、CastApp.js、shiro、redis、easyUI、jquery、javaScript、h5、css、jsp、html 项目运行说明: 后台服务端运行到tomcat中。访问项目时需要启动Redis服务,运行...
socket工具类,权限组件,菜单组件,jdbc分页支持多种数据库,ant路径工具类,增加jquery easyUI 1.0.9 版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 ...
socket工具类,权限组件,菜单组件,jdbc分页支持多种数据库,ant路径工具类,增加jquery easyUI 1.0.9 版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 ...
项目采用了前后端分离的技术架构,前端使用JSP+JSTL+EasyUI来创建用户界面,而后端则基于SpringMVC+Spring+Mybatis框架提供服务。数据存储选用性能优秀的MySQL数据库,服务器选择Tomcat,依赖管理工具是Maven。 在...
socket工具类,权限组件,菜单组件,jdbc分页支持多种数据库,ant路径工具类,增加jquery easyUI 1.0.9 版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 ...
4. **Spring全家桶**:除了Struts2和Hibernate,还熟练使用SpringMVC、JPA、SpringData、SpringSecurity、Shiro、JBPM和MyBatis。SpringMVC是Spring的Web MVC组件,JPA和SpringData简化了数据访问,SpringSecurity...
- **项目架构**:基于SSM(Spring、SpringMVC、Mybatis)架构,利用Maven进行项目管理。 - **功能实现**:包括系统登录、用户注册、众筹项目发布、众筹分类、论坛搜索和评论管理。 - **技术应用**:使用Shiro进行...
该项目服务端采用SSM(Spring、SpringMVC、MyBatis)架构和Maven技术实现,前端采用 HTML5、CSS3、JacaScript、jQuery、AJAX、EasyUI、XML、JSON等技术实现。并使用SVN进行团队合作开发和版本管理。
后台服务端利用Spring、SpringMVC、Mybatis和Shiro等技术框架,构建了一个稳定、高效且易于维护的系统架构。Spring是核心的框架,负责控制流程和依赖注入;SpringMVC则处理Web层的业务逻辑,使得视图、控制和模型...
在企业级开发中,SSM(Spring、SpringMVC、Mybatis)框架组合是常见的选择。Spring提供了依赖注入(DI)和控制反转(IOC),以及面向切面编程(AOP);SpringMVC简化了Web应用的开发,而Mybatis则是一个轻量级的持久...
Spring+SpringMVC+Mybatis框架集成公共模块,包括公共配置、MybatisGenerator扩展插件、通用BaseService、工具类等。 > zheng-admin 基于bootstrap实现的响应式Material Design风格的通用后台管理系统,`zheng`...
- **SpringMVC/MyBatis** - SpringMVC的请求处理流程 - MyBatis SQL映射与动态SQL - **EasyUI/RBAC/shiro** - EasyUI组件库介绍 - RBAC权限管理模型 - shiro安全框架的应用 #### 七、企业级技术 - **Maven/...