使用junit+mockito进行mock测试实例
2015-12-09 23:09
567 查看
刚开始做网站的时候,测试都是这样的(比如测试修改用户信息的表单逻辑):设置断点,启动运行程序,登陆,点击点击点击然后进入到测试的页面,输入测试数据,进入断点…….。一个大的程序启动又慢,还要登陆,还要输入那么多表单信息才进入到测试的那段代码,我的内心几乎是崩溃的。那时就想,要是测试web程序能像测试普通程序那样,直接测试要测试的那段代码该多好。后来发现,mock测试可以做到。
新建一个servlet类作为controller:
接下来我们就要测试这个Servlet的
分析一下上面的代码:
首先,要测试的
对象是模拟出来了,但是对象的行为还没模拟出来。我们发现Servlet的
每当模拟对象调用
总而言之,mock测试其实就一句话:需要什么不能自己创建的,就mock()出来,然后用when()给它增加需要的模拟行为。
2、源代码下载
mock测试实例
新建一个maven项目,加入junit和mockito的依赖。<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>1.8.4</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> </dependency>
新建一个servlet类作为controller:
public class StudentController extends HttpServlet{ @Override public void doGet(HttpServletRequest request,HttpServletResponse response){ String name = request.getParameter("name"); System.out.println(name); } @Override public void doPost(HttpServletRequest request,HttpServletResponse response){ } }
接下来我们就要测试这个Servlet的
doGet和
doPost方法。新建一个Junit测试类如下:
//这两个import要自己手写引进来 import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.junit.Before; import org.junit.Test; public class TestStudentController { private HttpServletRequest request; private HttpServletResponse response; private StudentController studentController; @Before public void setUp() throws Exception { request = mock(HttpServletRequest.class); response = mock(HttpServletResponse.class); when(request.getParameter("name")).thenReturn("123"); } @Test public void testDoGet() { studentController = new StudentController(); studentController.doGet(request, response); } @Test public void testDoPost() { } }
分析一下上面的代码:
首先,要测试的
doGet(request, response),我们发现
doGet需要两个参数,而且这两个参数是容器传进来的,自己无法创建,所以就模拟一个出来。如下:
request = mock(HttpServletRequest.class); response = mock(HttpServletResponse.class);
对象是模拟出来了,但是对象的行为还没模拟出来。我们发现Servlet的
doGet方法用到了
request.getParameter("name"),所以我们就给模拟对象增加这个模拟行为。如下:
when(request.getParameter("name")).thenReturn("123");
每当模拟对象调用
getParameter("name")方法时,就返回一个值
123,就好像真的执行了
request.getParameter("name")一样。
总而言之,mock测试其实就一句话:需要什么不能自己创建的,就mock()出来,然后用when()给它增加需要的模拟行为。
参考
1、Java Mocking入门—使用Mockito2、源代码下载
相关文章推荐
- Java Servlet 工作原理
- 欢迎使用CSDN-markdown编辑器
- oracle中查看表的约束条件
- 删除文件:文件夹正在被另一个人或程序使用...
- IOS 3种内省方法
- 第三个spring冲刺第3天
- cannot be cast to javax.servlet.Servlet
- rpmdb: BDB0113 错误
- Android使用本地广播
- Pycharm5注册方式
- Android使用本地广播
- Linux进程通信学习笔记
- 开发维护大型 Java 项目的建议
- Cocos2D-Android-1之源码详解:7.CocosNodeTest
- maven jar包不能引入到tomcat web项目lib的原因
- Photoshop非常实用的批处理技巧
- QSqlDatabase的进一步封装(多线程支持+更加简单的操作)——同时支持MySQL, SQL Server和Sqlite
- 《CSS3秘籍》第6、7章
- 初来乍到
- 学习c++总结