育路教育社区'的静态页面,查看详细内容请点击底部“查看完整版”后链接

.tΟp明∞ 发表于 2009-2-8 08:25

使用JMock进行单元测试

 不管是测试驱动开发或者是其它的开发模式,都会需要对代码进行单元测试,对于关联依赖关系少或者比较简单的类来说,直接使用JUnit就可以轻松的完成测试工作,但是对于关联到其它比较复杂的类或对运行环境有要求的类的单元测试,比如ejb,servlet或Dao等,测试起来或者需要配置特定的环境,或者十分耗时,给单元测试造成困难。在这里介绍使用JMock来模拟那些不需要测试的类,帮助完成有单元测试。
  例如,有这样两个类,一个是Dao.java,用于数据库访问成操作的,一个是Business.java,需要调用Dao进行业务处理。Dao.java是已经在有数据库的环境测试通过的,现在需要测试Business.java。通常情况下,我们需要在测试环境配置好数据库连接环境,并且需要准备数据后,才可以开始Business.java的测试,现在如果通过JMock就可以不配置数据库环境,也可以完成测试。
  //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//Dao.java
  package com.raistlin.test.jmock
  public class Dao
  {
  public Dao()
  {
  }

桔子熟了 发表于 2009-3-26 11:32

路过的,要顶的..

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.