http://tech.it168.com/jd/2008-01-12/200801120506372.shtml

【IT168 技术文档】不管是测试驱动开发或者是其它的开发模式,都会需要对代码进行单元测试,对于关联依赖关系少或者比较简单的类来说,直接使用JUnit就可以轻松的完成测试工作,但是对于关联到其它比较复杂的类或对运行环境有要求的类的单元测试,比如ejb,servlet或Dao等,测试起来或者需要配置特定的环境,或者十分耗时,给单元测试造成困难。在这里介绍使用JMock来模拟那些不需要测试的类,帮助完成有单元测试。

  例如,有这样两个类,一个是Dao.java,用于数据库访问成操作的,一个是Business.java,需要调用Dao进行业务处理。Dao.java是已经在有数据库的环境测试通过的,现在需要测试Business.java。通常情况下,我们需要在测试环境配置好数据库连接环境,并且需要准备数据后,才可以开始Business.java的测试,现在如果通过JMock就可以不配置数据库环境,也可以完成测试。

  JMock网站链接:http://www.jmock.org

  //Dao.java package com.raistlin.test.jmock public class Dao { public Dao() { } public List execute(String sql) { //数据库操作... } } //Business.java package com.raistlin.test.jmock public class Business { private Dao dao ; public void setDao(Dao dao) { this.dao = dao; } public String operate() { List list = dao.execute("select * from tbl_test"); return (String) list.get(0); } } //BusinessTest.java package com.raistlin.test.jmock import org.jmock.cglib.MockObjectTestCase; import org.jmock.cglib.Mock; public class BusinessTest extends MockObjectTestCase { private Mock mockDao = null; private Business business = null; protected void setUp() throws Exception { super.setUp(); mockDao = new Mock(Dao.class); business = new Business(); } protected void tearDown() throws Exception { mockDao = null; business = null; super.tearDown(); } public void testOperate() { ArrayList stubList = new ArrayList(); stubList.add("test"); // 定义Mock剧本 mockDao.expects(once())// 期待次数 .method("execute")// 调用方法 .with(eq("select * from tbl_test"))// 传入参数等于 .will(this.returnValue(stubList));// 返回对象 Dao dao = (Dao) mockDao.proxy(); business.setDao(dao); assertEquals(business.operate(), "test"); } }

  在工程中导入jmock-1.0.1.jar ,jmock-cglib-1.0.1.jar ,cglib-full-2.0.jar 三个jar包,然后在JUnit中执行BusinessTest.java,会显示绿棒,这样,在没有数据库的情况下,单元测试成功。

  使用JMock模拟类的条件:

  1、要有无参数的构造器;

  2、构造器是public;

  这样对于private的构造器或单例模式的类应该是无法模拟了。这样就要求我们养成针对接口编程的习惯,对接口用JMock进行模拟将不受这些限制。只需要将

  import org.jmock.cglib.MockObjectTestCase;

  import org.jmock.cglib.Mock;

  改为

  import org.jmock.MockObjectTestCase;

  import org.jmock.Mock;

  即可。

  对于Mock类,有很多API可供使用,比如:

  isA(Class clz) 表示为某个类

  isVoid() 将will()换成isVoid()表示无返回值

  详细API可以参考一下DOC,还会找到很多有用的东西。

24分钟学会用JMock进行单元测试相关推荐

  1. 厉害了,24分钟让AI跑起飞车类游戏

    来源|腾讯WeTest 编辑|布袋熊 导Lead语 谷歌用人工智能技术训练了AlphaGo机器人在围棋盘上打败了柯洁和李在石,阿里训练了千牛店小蜜为商家提供智能客服服务,百度用人工智能技术做出了Apo ...

  2. Pyechart:30分钟学会pyecharts数据可视化

    30分钟学会pyecharts数据可视化 小红:你先跟我说说什么是pyecharts吧. 小明:Echarts 是一个由百度开源的数据可视化javascript库,凭借着良好的交互性,精巧的图表设计, ...

  3. 24分钟让AI跑起飞车类游戏

    本文由云+社区发表 作者:WeTest小编 WeTest 导读 本文主要介绍如何让AI在24分钟内学会玩飞车类游戏.我们使用Distributed PPO训练AI,在短时间内可以取得不错的训练效果. ...

  4. 5分钟学会Python爬虫神器autoscraper——自动化爬虫必备

    5分钟学会Python爬虫神器autoscraper--自动化爬虫必备 爬虫神器autoscraper介绍 安装 使用 批量抓取 查看结果 爬虫神器autoscraper介绍 今天给大家介绍一个非常智 ...

  5. 5分钟学会cleos注册EOS主网账户、投票和发币

    第一步: 安装docker https://www.docker.com/community-edition # install docker for CentOS. (其他操作系统看上面链接) su ...

  6. 10分钟上手pythonpandas_【译】10分钟学会Pandas

    十分钟学会Pandas 这是关于Pandas的简短介绍主要面向新用户.你可以参考Cookbook了解更复杂的使用方法 习惯上,我们这样导入: In [1]: importpandas as pd In ...

  7. 十分钟学python-【译】10分钟学会Pandas

    十分钟学会Pandas 这是关于Pandas的简短介绍主要面向新用户.你可以参考Cookbook了解更复杂的使用方法 习惯上,我们这样导入: In [1]: importpandas as pd In ...

  8. 1分钟学会SpringBoot2知识点,让你35岁不再失业(二)

    1分钟学会SpringBoot2知识点,让你35岁不再失业(二) 目录 1分钟学会SpringBoot2知识点,让你35岁不再失业(二) 第十三节.springboot2集成mybatis和swagg ...

  9. 案例分享 | 24 分钟让 AI 跑起飞车类游戏

    文 / 腾讯 IEG 图灵实验室 李旭冬 导语:本文主要介绍如何用 TensorFlow 让 AI 在 24 分钟内学会玩飞车类游戏.我们使用 Distributed PPO 训练 AI,在短时间内可 ...

最新文章

  1. Lotus的书买回来了
  2. Akka2使用探索1(Remoting)
  3. 智能合约重构社会契约 (1)李嘉图合约
  4. oracle sql execute elapsed time,SQL ordered by Elapsed Time 脚本
  5. 把区块链作为核心技术自主创新重要突破口:华为云可以做什么?【华为云分享】
  6. 我也说说刘谦在2010年春晚上的魔术作假
  7. H3C OSPF实验
  8. Linux的网络安装
  9. java调用lingo实例_LINGO使用教程(一)
  10. 公开的Webservice集锦
  11. 第三章 DirectX 图形绘制(上)
  12. Racket编程指南——2 Racket概要
  13. 面试软件测试总结(常见的面试问题)
  14. Nginx服务详细篇从基础到反向代理和负载均衡
  15. 【Unity】优化工具Profiler
  16. intel英特尔架构
  17. 密码的自动生成器:密码由大写字母/小写字母/数字组成,生成12位随机密码
  18. pyqt5 制作壁纸切换工具实例 第一章
  19. 网页设计全套视频教程(html,网页三剑客,CSS,Flash,ASP,Photoshop)
  20. 遗传算法优化BP神经网络前后的对比

热门文章

  1. HarmonyOS之在工程中导入Sample工程和添加Module
  2. 数据解析,重中之重!
  3. 动态规划 —— 01背包问题
  4. 《算法竞赛入门经典》习题4-2 正方形 (Squares,ACM,ICPC World Finals 1990,UVa201)——仅提供大体方法
  5. C语言register关键字——最快的关键字
  6. 【Qt】Qt之网格布局
  7. 【Linux】一步一步学Linux——pgrep命令(123)
  8. linux的svn同步文件在哪里,linux svn服务器同步文件在哪里
  9. oracle最新版本是多少_运维日记|关于Oracle的补丁你需要知道的事
  10. 每天一道LeetCode-----顺时针旋转n×n矩阵90度