`
ZHENFENGSHISAN
  • 浏览: 71344 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
7e6e47ee-161c-3be5-bd41-0eb274ec4d0e
Spring+Spring...
浏览量:35898
31792615-da99-349b-8109-bbf420058c1d
Spring+Spring...
浏览量:25566
社区版块
存档分类
最新评论

Spring+SpringMVC+MyBatis+easyUI整合优化篇(五)结合MockMvc进行服务端的单元测试

阅读更多

日常啰嗦

承接前一篇文章《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测试的话可以自行搜索相关教程。

3
3
分享到:
评论

相关推荐

    SSM框架(Spring+SpringMVC+MyBatis)+shiro+Maven.zip

    ● 实现方法: 使用MySQL 建立数据库。服务端使用SSM框架(Spring+SpringMVC+MyBatis)+shiro+Maven,使用Myeclipse进行开发。前端使用MUi和HUI框架和vue(与后台交互模板)和Html5+css3来实现移动端App的开发。

    掌上校园app

    开发技术:Spring+SpringMVC+MyBatis+EasyUI 功能描述: 移动端:校园动态浏览,评论,点赞,删除(管理员),添加(管理员) 校园活动圈的浏览,加入,删除(管理员),发布(管理员) 账号设置,头像设置,...

    基于SpringMVC+EasyUI的后台管理系统源码+数据库,已投入生产线上使用 开箱即用,五分钟完成部署

    除了SpringMVC和EasyUI,此项目可能还使用了其他技术,如Spring Boot、MyBatis或Hibernate作为持久层框架,Spring Security或Shiro进行权限控制,以及Log4j或Logback进行日志管理。这些技术的结合使用,构建了一个...

    easyUI_SSM增删改查(包含服务器端分页)

    在本项目中,“easyUI_SSM增删改查(包含服务器端分页)”是一个基于Java Web技术的实践案例,主要展示了如何使用Spring、SpringMVC和MyBatis(SSM)框架集成,并结合easyUI前端框架实现学生信息管理系统的功能,...

    springboot和springmvc作为基本的框架使用

    8. **测试**:Spring Boot的Test模块支持单元测试和集成测试,确保代码质量。 综上所述,Spring Boot和Spring MVC的结合,为酒店管理系统提供了强大的后端支持,通过合理的设计和配置,可以构建出高效、稳定的业务...

    一个可以直接运行的基于SpringMVC的web框架1.1.12

    socket工具类,权限组件,菜单组件,jdbc分页支持多种数据库,ant路径工具类,增加jquery easyUI 1.0.9 版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 ...

    基于SSM + MUI 的论坛APP的设计与实现

    用到相关的技术: Spring、springmvc、mybatis、MUI、CastApp.js、shiro、redis、easyUI、jquery、javaScript、h5、css、jsp、html 项目运行说明: 后台服务端运行到tomcat中。访问项目时需要启动Redis服务,运行...

    基于Spring MVC的web框架 1.1.11

    socket工具类,权限组件,菜单组件,jdbc分页支持多种数据库,ant路径工具类,增加jquery easyUI 1.0.9 版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 ...

    可以直接运行的基于SpringMVC的web框架示例,也可以直接当公司框架

    socket工具类,权限组件,菜单组件,jdbc分页支持多种数据库,ant路径工具类,增加jquery easyUI 1.0.9 版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 ...

    尚硅谷_毕业设计之学生管理系统1

    项目采用了前后端分离的技术架构,前端使用JSP+JSTL+EasyUI来创建用户界面,而后端则基于SpringMVC+Spring+Mybatis框架提供服务。数据存储选用性能优秀的MySQL数据库,服务器选择Tomcat,依赖管理工具是Maven。 在...

    基于SpringMVC的一个web框架

    socket工具类,权限组件,菜单组件,jdbc分页支持多种数据库,ant路径工具类,增加jquery easyUI 1.0.9 版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 ...

    Java开发工程师简历模版.docx

    4. **Spring全家桶**:除了Struts2和Hibernate,还熟练使用SpringMVC、JPA、SpringData、SpringSecurity、Shiro、JBPM和MyBatis。SpringMVC是Spring的Web MVC组件,JPA和SpringData简化了数据访问,SpringSecurity...

    java开发工程师+3年工作经验+本科+计算机科学与技(重点看项目)术.docx

    - **项目架构**:基于SSM(Spring、SpringMVC、Mybatis)架构,利用Maven进行项目管理。 - **功能实现**:包括系统登录、用户注册、众筹项目发布、众筹分类、论坛搜索和评论管理。 - **技术应用**:使用Shiro进行...

    CRM管理系统

    该项目服务端采用SSM(Spring、SpringMVC、MyBatis)架构和Maven技术实现,前端采用 HTML5、CSS3、JacaScript、jQuery、AJAX、EasyUI、XML、JSON等技术实现。并使用SVN进行团队合作开发和版本管理。

    一种电动汽车安全检测信息系统设计与实现.pdf

    后台服务端利用Spring、SpringMVC、Mybatis和Shiro等技术框架,构建了一个稳定、高效且易于维护的系统架构。Spring是核心的框架,负责控制流程和依赖注入;SpringMVC则处理Web层的业务逻辑,使得视图、控制和模型...

    Java学习零基础到架构师学习路线

    在企业级开发中,SSM(Spring、SpringMVC、Mybatis)框架组合是常见的选择。Spring提供了依赖注入(DI)和控制反转(IOC),以及面向切面编程(AOP);SpringMVC简化了Web应用的开发,而Mybatis则是一个轻量级的持久...

    单点登录源码

    Spring+SpringMVC+Mybatis框架集成公共模块,包括公共配置、MybatisGenerator扩展插件、通用BaseService、工具类等。 > zheng-admin 基于bootstrap实现的响应式Material Design风格的通用后台管理系统,`zheng`...

    java1000题基础百战程序员

    - **SpringMVC/MyBatis** - SpringMVC的请求处理流程 - MyBatis SQL映射与动态SQL - **EasyUI/RBAC/shiro** - EasyUI组件库介绍 - RBAC权限管理模型 - shiro安全框架的应用 #### 七、企业级技术 - **Maven/...

Global site tag (gtag.js) - Google Analytics