在单元测试中使用EasyMock
来源:互联网 发布:qq音乐mac破解版 编辑:程序博客网 时间:2024/06/05 05:59
我们每天的开发中都要编写大量的单元测试,很多单元测试的对象是相对独立的,例如一个所得税计算的模块,但是更多的单元测试需要依赖其他的组件或者服务。因此,我们需要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
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=817575
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在单元测试中使用EasyMock
- 在Eclipse中使用Junit4.x与EasyMock进行单元测试
- 移:使用easymock单元测试
- 将XForm集成到你的工作流引擎里面
- 几个常用的Ajax库小节
- IBM指南 - Ajax的传输方式
- 使用os3grid做一个基于Web和Ajax的工资表录入界面
- 为我的Blog加上了博客地图
- 在单元测试中使用EasyMock
- AutoCRUD - PHP 下的透明持久层
- 关于先有鸡还是先有蛋,终于有正确答案了
- 你的公司建立了企业文化了么?没有就看看这个
- 一个“Spring轮子”引发的“血案”(4)
- 使用Pear的RPN库处理工资计算公式
- 编写安全的Symbian C++游戏代码
- 一个“Sprng轮子”引发的“血案”(3)
- 为什么大多数大型网站不是用Java写的