在单元测试中使用EasyMock

原创 2006年06月21日 08:22:00

我们每天的开发中都要编写大量的单元测试,很多单元测试的对象是相对独立的,例如一个所得税计算的模块,但是更多的单元测试需要依赖其他的组件或者服务。因此,我们需要EasyMock来无缝的连接这些组件。Mock的意思就是空的,不存在的东西。

EasyMock刚刚发布了2.2版本,它开始使用很多基于jdk 1.5的特性。

下面我们举一个例子:

假设定义一个如下的接口:

public interface ISimpsonService {
    IEpisode getEpisode(int number);
}

public interface IEpisode {
    int getNumber();
   String getTitle();
   InputStream getDataAsStream();
}

该接口的实现为

public class ClientSimpsonService implements ISimpsonService {
    private ISimpsonService remoteSimpsonService;
    public ClientSimpsonService(ISimpsonService remoteSimpsonService) {
        this.remoteSimpsonService = remoteSimpsonService;
    }
    public IEpisode getEpisode(int episodeNumber) {
        return null;
    }
}
对该服务的单元测试如下
public class ClientSimpsonServiceTest extends TestCase {
    public void testClientSimpsonService() {
        try {
            new ClientSimpsonService(null);
            fail("Expected IllegalArgumentException");
        } catch (IllegalArgumentException e) {
            // expected
        }
    }
我们可以看到因为没有remoteSimpsonService,所以我们只传一个null给ClientSimpsonService,
这样是无法完成测试的。所以我们把还没有写的remoteSimpsonService用mock替代。
import static org.easymock.EasyMock.createMock;
import junit.framework.TestCase;
public class ClientSimpsonServiceTest extends TestCase {
    private ISimpsonService remoteSimpsonServiceMock;
    protected void setUp() throws Exception {
        super.setUp();
        remoteSimpsonServiceMock =
            createMock(ISimpsonService.class);
    }
    public void testClientSimpsonService() {
        try {
            new ClientSimpsonService(null);
            fail("Expected IllegalArgumentException");
        } catch (IllegalArgumentException e) {
            // expected
        }
        new ClientSimpsonService(remoteSimpsonServiceMock);
    }
}
上面的黑体代码中,我们创建了一个ISimpsonService.class的mock,它拥有和ISimpsonService一样
接口。
同样的方法,我们可以定义ISimpsonService返回的对象IEpisode
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import junit.framework.TestCase;
public class ClientSimpsonServiceTest extends TestCase {
    private IEpisode episode17Mock;
    private ISimpsonService remoteSimpsonServiceMock;
    protected void setUp() throws Exception {
        super.setUp();
        episode17Mock = createMock(IEpisode.class);
        remoteSimpsonServiceMock =
            createMock(ISimpsonService.class);
    }
...
    public void testGetEpisode() throws Exception {
        expect(remoteSimpsonServiceMock.getEpisode(17))
            .andReturn(episode17Mock);
        replay(remoteSimpsonServiceMock);
        ISimpsonService clientSimpsonService = 
            new ClientSimpsonService(remoteSimpsonServiceMock);
        IEpisode result = clientSimpsonService.getEpisode(17);
        verify(remoteSimpsonServiceMock);
        assertEquals(episode17Mock, result);
    }
上文仅仅是抛砖引玉,想了解更多EasyMock,请参看
http://today.java.net/pub/a/today/2006/06/20/getting-started-with-easymock-2.html

使用PowerMock和Easymock进行单元测试

Java单元测试对于开发人员质量保证至关重要,尤其当面对一团乱码的遗留代码时,没有高覆盖率的单元测试做保障,没人敢轻易对代码进行重构。然而单元测试的编写也不是一件容易的事情,除非使用TDD方式,否则编...
  • u010860412
  • u010860412
  • 2016年02月16日 20:11
  • 1274

用EasyMock进行单元测试:什么是EasyMoc

原文:http://www.zhlwish.com/2012/06/29/easymock-1/ 用EasyMock进行单元测试:什么是EasyMock 发: 周亮 我们都知道单元测试,也...
  • xiongmc
  • xiongmc
  • 2013年07月02日 19:31
  • 1253

聊聊单元测试(一)——EasyMock

一、单元测试是保证软件质量的重要方法。 单元测试是对系统中某个模块功能的验证,但我们总会遇到这样那样的问题,导致测试代码很难编写。最直接的一个原因便是强耦合关系,被测试者依赖一些不容易构造,...
  • shan9liang
  • shan9liang
  • 2014年07月11日 10:00
  • 4022

dao层service层分别使用dbunit以及easymock进行单元测试

Java中经常对service层和dao层进行单元测试,对dao层进行测试可以使用dbunit进行测试,对service可以使用easyMock和spring-test.jar进行测试 (1)dao...
  • uestc_lxp
  • uestc_lxp
  • 2015年04月30日 13:45
  • 1239

EasyMock 单元测试

之前写单元测试的时候用的是自己的“方法”,最土办法就是造不同的数据然后进行不同的分支进行覆盖,其实效率很低而且有些方法测试不到。比如在系统当中需要和容器进行打交道的地方就很费劲,要么就是启动一个容器(...
  • beijiguangyong
  • beijiguangyong
  • 2013年12月31日 23:52
  • 2283

EasyMock 单元测试

Java开发过程中需要使用EasyMock做单元测试,今天上手使用了一下,记录之! 开发环境: JDK7.0+MyEclipse10+EasyMock3.3.1+Win7+JUnit4 1) 接口IA...
  • afandaafandaafanda
  • afandaafandaafanda
  • 2015年01月24日 10:10
  • 1693

【JUnit】EasyMock用法总结

使用EasyMock的总体步骤 1、生成Mock接口 IService mockService = EasyMock.createMock("name", IService.class); 如...
  • vking_wang
  • vking_wang
  • 2013年06月25日 16:52
  • 14292

Spring+EasyMock对Service层方法进行测试,处理@Resource属性

这次说说怎么对Service层方法进行测试,同时弄清楚怎么来处理@Resource、@Autowired属性。 通过实例来描述: 有一个Service类,如下: public...
  • u010218617
  • u010218617
  • 2013年08月28日 18:59
  • 2585

使用 EasyMock 更轻松地进行测试

本文转自:点击打开链接 测试驱动开发是软件开发的重要部分。如果代码不进行测试,就是不可靠的。所有代码都必须测试,而且理想情况下应该在编写代码之前编写测试。但是,有些东西容易测...
  • zhuyucheng123
  • zhuyucheng123
  • 2016年11月30日 16:36
  • 833

easyMock原理简述

简述mock是一种简易直接的测试方法,在我们日常单元测试的时候,经常会使用到,本文会分析一个我们常见的用于mock的工具easyMock,简单分析其原理助于大家理解和使用。功能一览public int...
  • u010632868
  • u010632868
  • 2016年08月09日 00:04
  • 683
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在单元测试中使用EasyMock
举报原因:
原因补充:

(最多只允许输入30个字)