网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > J2EE/J2ME
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.JavaBean与EnterpriseJavaBean有.
.多重提交处理(一).
.KVM的执行引擎(上) — 栈和帧.
.高可靠性移动应用程序-移动数据.
.J2EE的Web服务原理和体系结构慨述.
.JBOSSAOP学习笔记-AOP的优点.
.测试MySQL驱动的安装.
.Spring 系列:当 Hibernate 遇上.
.在Canvas上绘制可修改的图片.
.用Lucene做一个简单的Java搜索工.
.henson.midp.Float浮点类介绍.
.Spring 系列:Spring JMS 消息处.
.使用FileConnection访问文件系统.
.Datagram数据报的接收和发送.
.MVC构架学习之渐行渐进(一).
.扫描屏幕和颜色渐变的效果.
.Java ME平台中的URLEncoder实现类.
.检测浏览器类型.
.J2MEMobile3D入门教程系列文章之.
.J2EE入门教程之一.

24分钟学会用JMock进行单元测试

发表日期:2007-12-23


       不管是测试驱动开发或者是其它的开发模式,都会需要对代码进行单元测试,对于关联依赖关系少或者比较简单的类来说,直接使用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,还会找到很多有用的东西。

(出处:)


上一篇:封装MathFP和FloatBox 人气:590
下一篇:henson.midp.Float浮点类介绍 人气:746
浏览全部J2EE/J2ME的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐