使用junit+mockito进行mock测试实例

刚开始做网站的时候,测试都是这样的(比如测试修改用户信息的表单逻辑):设置断点,启动运行程序,登陆,点击点击点击然后进入到测试的页面,输入测试数据,进入断点…….。一个大的程序启动又慢,还要登陆,还要输入那么多表单信息才进入到测试的那段代码,我的内心几乎是崩溃的。那时就想,要是测试web程序能像测试普通程序那样,直接测试要测试的那段代码该多好。后来发现,mock测试可以做到。

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{@Overridepublic void doGet(HttpServletRequest request,HttpServletResponse response){String name = request.getParameter("name");System.out.println(name);}@Overridepublic void doPost(HttpServletRequest request,HttpServletResponse response){}}

接下来我们就要测试这个Servlet的doGetdoPost方法。新建一个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;@Beforepublic void setUp() throws Exception {request = mock(HttpServletRequest.class);response = mock(HttpServletResponse.class);when(request.getParameter("name")).thenReturn("123");}@Testpublic void testDoGet() {studentController = new StudentController();studentController.doGet(request, response);}@Testpublic 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入门—使用Mockito
2、源代码下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sdk怎么用_PLC不支持OPC UA怎么办?别问了看完你就懂了

经常有人会烦恼这个问题&#xff1a;我的上位机软件什么功能都有&#xff0c;也支持OPC UA了&#xff0c;现在项目上准备用OPC UA的方式来获取我的PLC的数据&#xff0c;但是我的PLC却不支持OPC UA&#xff0c;怎么办呢&#xff1f;有的人碰到这个问题后就开始了“病急乱投医”…

js学习大法:用好firebug,走遍天下都不怕

用js有一段时间了&#xff0c;但是一直手感不好。平时用DW来写js代码&#xff0c;常抱怨js的编辑器的自动代码提示和调试功能用起来很不爽&#xff0c;自动代码提示十分有限&#xff0c;而且写错一个单词这样的错误都要运行整个网页之后才发现。今天闲来无聊&#xff0c;翻看了…

初学Java6:Java OOP基础语法总结

*************** Java OOP 基 础 语 法 总 结 ************************* 1,类与对象1),类(class)是相同属性和方法的一组集合。 A,类的组成&#xff1a;属性和方法。 B,语法声明&#xff1a;使用class关键字&#xff0c;eg&#xff1a;public class Student{}//类名首字母大写…

python杀死了excel_Python杀死了Excel|自动更新表格,告别繁琐

大家好&#xff0c;又到了Python办公自动化专题。 今天我们讲解的案例是如何使用Python自动更新Excel表格&#xff0c;简单来说就是每天都会对Excel中多个sheet进行更新&#xff0c;需要操作完后可以用程序完成第一张sheet 汇总表的更新&#xff0c;大概就是这样&#x1f447;当…

TP-LINK路由器连接网线上网教程(租房必备)

租的房子&#xff0c;房子里只有一根普通网线&#xff0c;连着房东家的路由器&#xff0c;这时可以使用TP-LINK路由器使用LAN-WAN级联的方式&#xff0c;在室内搭建一个局域网。 设置教程 准备材料&#xff1a;1根网线 重置路由器&#xff1a;启动路由器&#xff0c;使用牙签…

推荐一款非常强大的扒站工具

在平时的开发或者学习的过程中&#xff0c;我们难免会看到一些让人心动的网站&#xff0c;于是自己想把它弄下来&#xff0c;自己手工一个文件一个文件把它保存下来不太可能&#xff0c;那得累死你&#xff0c;下面我推荐一款扒站的神器&#xff0c;可以把你所喜欢的目标网站整…

python脚本之家 包的创建和调用_python基础之包的导入和__init__.py的介绍

调用同级目录&#xff1a; – src |– mod.py |– test.py 若在程序test.py中导入模块mod, 则直接使用 import mod 或 from mod import * 调用子目录下的模块&#xff1a; – src |– mod.py |– lib | |– mod2.py |– test.py from lib.mod2 import * 或 import lib.mod2 调用…

无刷新分页 jquery.pagination.js

序言 这一款js分页使用起来很爽&#xff0c;自己经常用&#xff0c;做项目时总是要翻以前的项目看&#xff0c;不方便&#xff0c;这里就把他写出来方便自己以后粘帖&#xff0c;也希望能分享给大家。友情提示下&#xff1a;我有一片博客是用着个js实现的无刷新分页也很好用&am…

windows 10打开或禁用管理员账户

windows 10下默认关闭了管理员账户&#xff0c;因为权限太高&#xff0c;而且win 10推荐通过网络账户登录。如果要使用&#xff0c;可以通过下面的方式打开。 1、登录一个普通账户。 如果你是刚升级上来&#xff0c;普通账户都没有。那么&#xff0c;用别人的电脑下载安装老毛…

hbase filter原理_HBase应用|HBase在移动广告监测产品中的应用

1HBase在Ad Tracking的应用1.1Ad Tracking的业务场景Ad Tracking是TalkingData的移动广告监测产品&#xff0c;其核心业务模型是归因。App用户点击广告之后&#xff0c;及随后安装广告跳转到的应用或者游戏&#xff0c;Ad Tracking会对这些点击事件(用户点击广告的行为)和激活事…

const char *p、char const *p、char *const p

const char *p&#xff1a;p不是常量&#xff0c;可以修改p的值&#xff0c;但不能修改p指向空间的值char const *p与char *const p&#xff1a;p是常量&#xff0c;不能修改p的值&#xff0c;但能修改p指向空间的值const char *const p&#xff1a;两者均为常量&#xff0c;不…

eclipse 快捷键及插件

webstorm设置keymap为eclipse也可使用。 快捷键 快捷键用途使用方法编辑器事件ctrlt打开继承树将鼠标移到某个类上&#xff0c;按ctrltctrl/注释本行altshiefj生成属性注释&#xff0c;这杨的/**/ctrlalt 下箭头复制本行到下一行alt 下箭头移动本行到下一行ctrld删除整行alt/…

drools动态配置规则_关于规则引擎

很早之前就知道Drools&#xff0c;这几天正好有个项目&#xff0c;里面用了大量的规则定义&#xff0c;就想是否能采用Drools来解决。在github上分析了规则引擎项目&#xff0c;包括&#xff1a;Easy-ruleshttps://github.com/j-easy/easy-rules通过程序代码来完成规则引擎&…

linux安装mysql5.6

目录 准备工作 运行环境 确认你的安装版本 下载MySQL 安装MySQL 准备安装环境 编译和安装 配置MySQL 单实例配置 单实例配置方法 添加防火墙 启动MySQL 重启MySQL 多实例配置 什么是多实例 多实例配置方法 创建启动文件 初始化数据库 配置防火墙 启动MySQL 登陆MySQL 重启MySQL…

Spring 4 MVC入门实例

Spring 4发布很长一段时间了&#xff0c;从 Spring 3 到 Spring 4 有巨大的改变。网上还有很多教程是基于 Spring 3.0 的&#xff0c;甚至 Spring 2.5&#xff0c;要想按照网上的教程“按图索骥”还是挺困难的。纵有一些 Spring 4.0 MVC 的教程例子&#xff0c;也往往是 “Spri…

python写入二进制文件的库_python之写入二进制文件

概述 计算机都是以二进制存储文件的&#xff0c;如mp3、图片等&#xff0c;文本文件也是如此&#xff0c;在本节中以二进制模式写入文件 写文件的很多操作&#xff0c;与读文件的操作是相同的&#xff0c;建议先看 读取二进制文件 打开文件 读写文件&#xff0c;要先通过内置op…

Excel文件打不开别担心,看完这些提示或许能让其起死回生

使用Excel电子表格时,大多数人有时要么时间紧迫,要么有最后期限。如果在那个时候,Microsoft Excel如果不打开,那可能是一场噩梦。 不幸的是,当Excel拒绝打开你的一个重要Excel文件,或者无法完全打开Excel应用程序时,这种意外行为非常常见。 所以,如果你遇到“Microso…

gulp插件gulp-ruby-sass和livereload插件

gulp-ruby-sass是gulp的一个插件&#xff0c;主要是用来实现sass编译&#xff0c;livereload插件主要是实现文件保存时浏览器自动刷新&#xff0c;避免了手动f5的频繁的操作 准备工作&#xff1a;chrome浏览器安装livereload插件&#xff0c;没有安装的可以百度搜索或者FQ下载&…

eclipse 创建 maven web 项目教程

&#xff08;1&#xff09;新建一个Maven 项目 file –> new –> maven project 直接点 next 直接点 next 填写groupid和artifactid&#xff0c;这两个可以随便填&#xff0c;名称而已。填完 finish &#xff08;2&#xff09;将项目转成 Dynamic Web项目 选中项目&#…

sql backup database备份d盘_ClickHouse 备份与恢复

本文转载自 万能修实验室 作者&#xff1a;公先生 ID: dropudatabase我们评估一款数据库产品&#xff0c;除了稳定性和易用性外&#xff0c;数据安全也十分重要&#xff0c;备份与恢复往往是最后一道安全门。但如果备份策略不完善、恢复手段无效&#xff0c;一旦发生数据误删除…