Spring+SpringMVC+MyBatis+easyUI整合优化篇(五)MockMvc服务端的单元测试
来源:互联网 发布:编程珠玑 百度网盘 编辑:程序博客网 时间:2024/05/17 17:38
承接前一篇文章《Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例》,已经讲解了dao层和service层的单元测试,还有控制器这层也不能漏掉,因此本篇会讲一下MockMvc,及controller控制层的单元测试,相关代码已上传,可自行下载。
我的github地址
可能我们在测试控制层的代码都是启动服务器,在浏览器中输入URL,然后开始测试是否达到预期效果,发生错误的话,修改相关代码并重启服务器再次进行测试。分析一下这个过程,启动服务器-->打开浏览器-->输入URL-->等待返回结果-->修复bug-->重启服务器.....循环。
其中的缺点也挺明显的,在浏览器输入URL的地址,如果是GET请求还好,POST请求或者DELETE请求怎么办?只能借助其他工具,通过命令行编写curl语句,或者借助谷歌浏览器的postman插件,亦或者自己在代码中通过编写相应httpClient方法来实现测试,但是这几种方法都较为麻烦,而且测试用例并不能较好的保存。再说一个缺点,代码修改后,往往需要再次重启服务器,等待启动完毕才能接下来的测试过程。
如果tomcat服务器启动速度较慢,这将是一件非常痛苦的事情,测试验证也不方便,且依赖网络环境,这些原因导致测试起来很麻烦,而为了可以方便对Controller进行测试,且很好的保存和循环使用测试用例,则可以通过单元测试来解决,通过前面一篇文章,大家对于单元测试的便利性有了认识和体会,接下来通过引入MockMVC进行控制层的单元测试。
MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。
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)@Transactionalpublic 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测试的话可以自行搜索相关教程。
作者: 涵s
链接:http://www.imooc.com/article/17692
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作!
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(五)结合MockMvc进行服务端的单元测试
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(五)MockMvc服务端的单元测试
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十)数据层优化-整合druid
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十)数据层优化-整合druid
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(二)Log4j讲解与整合
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(二)Log4j讲解与整合
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)富文本编辑器UEditor整合
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十四)谈谈写博客的原因和项目优化
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(八)代码优化整理及个人吐槽
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(五)讲一下maven
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(五)讲一下maven
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(七)图片上传功能
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)System.out.print与Log
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(三)代码测试
- spring+quartz
- Java数组基础
- 检查网络NetworkUtil
- 【Mybatis学习】Eclipse创建Maven-Mybatis项目
- Node.js搭建简单的环境
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(五)MockMvc服务端的单元测试
- 获取跳转页面src传递参数
- Elasticsearch Reference【Mapping】
- Docker学习笔记-Docker端口映射
- HAProxy安装使用和配置
- spring boot 一 HelloWorld
- 屏幕方向OrientationUtil
- 【Masm】使用教程
- Sequence to Sequence 实现机器翻译(keras demo)