Java Servlet单元测试

Java Servlet单元测试

1. 解决痛点

虽然目前主流的开发方式,很多都是通过controll或者微服务提供api.但是不免还是需要写几个servlet完成接口开发.按照常规,servlet调用服务层代码,只需做下服务层单元测试就好了.可是,这里就忽略了请求参数处理过程的测试,按照以往,如果需要测试,往往是先运行一个tomcat,然后找到一个借口测试工具,完成接口测试.其实没这么麻烦,使用spring-test即可快速搞定.解决了如下痛点

  • 单元测试覆盖不全面
  • 不需要启动一个servlet容器
  • 不需要第三方的接口测试工具

2. 实现方式

既然是做单元测试,首先我们需要在pom文件引入junitspring-test两个依赖

1<!--author:herbert wx:464884492--> 2<dependency> 3 <groupId>junit</groupId> 4 <artifactId>junit</artifactId> 5 <version>4.12</version> 6 <scope>test</scope> 7</dependency> 8<dependency> 9 <groupId>org.springframework</groupId> 10 <artifactId>spring-test</artifactId> 11 <version>${springVersion}</version> 12 <scope>test</scope> 13</dependency>

然后在单元测试的代码中声明,我们需要做单元测试的servlet对象,单元测试类加载时实例化这个对象.

1// author:herbert wx:464884492 2public class DemoServletTest { 3 DemoServlet servlet = null; 4 5 @Before 6 public void setUp() { 7 servlet = new DemoServlet(); 8 DOMConfigurator.configure("src/main/webapp/WEB-INF/log4j.xml"); 9 } 10}

再添加我们具体的测试方法,简单几句代码就完成了一个请求封装.

1// author:herbert wx:464884492 2@Test 3public void testReqImg() throws ServletException, IOException, InterruptedException { 4 JSONObject p = new JSONObject(); 5 p.put("demoRequest", "herbert 通过spring-test 测试servlet"); 6 MockHttpServletRequest request = new MockHttpServletRequest(); 7 request.setContent(p.toString().getBytes()); 8 MockHttpServletResponse response = new MockHttpServletResponse(); 9 servlet.doPost(request, response); 10 while (true) { 11 Thread.sleep(200); 12 } 13}

其实现原理就是 MockHttpServletRequestMockHttpServletResponse 分别实现了接口 HttpServletRequestHttpServletResponse,一般情况下是,容器自动实现的.所以一般开发时不会注意具体的实现内容.如果感兴趣,完全可以自己实现这两个接口,完成单元测试.

3. 总结

知识虽小,重在积累.2020注定是不平凡的一年.加油!!

欢迎感兴趣的朋友关注我的订阅号“小院不小”,或点击下方二维码关注。我将多年开发中遇到的难点,以及一些有意思的功能,体会都会一一发布到我的订阅号中 订阅号

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )