使用EasyMock扩展为Class提供Mock对象
2006-02-22 21:49
429 查看
使用EasyMock扩展为Class提供Mock对象
Author:kongxx
通常我么在测试一些类的时候需要依赖另外一些类或接口,而此时可能这些类或接口可能仅仅是方法签名而没有真正的实现。此时我们就可以使用一些第三方类库来解决这个问题,比如常用的EasyMock,JMock等。但是这两个类库默认情况下都只能Mock接口,而不能Mock类,那么我们应该怎样解决这个问题呢?其实EasyMock和JMock两个框架也提供了对类作Mock的解决办法,不过这个功能需要他们提供的一个扩展类库才能实现。我们可以在他们的官方网站上下载这两个扩展。对于EasyMock下载EasyMock Class Extension 2.0_Pre-Release,对于JMock下载 jMock/CGLIB extension binary JAR。
下面是一个小例子:
Worker.java一个需要测试的业务类,它依赖一个抽象的Configuration对象.
Configuration.java一个抽象类,会有一些子类来实现它的抽象方法.
WorkerTest.java一个测试类,需要用到Configuration对象实例,这里Mock了一个Configuration对象用来为execute方法提供支持.
运行JUnit测试,GreenBar。OK!
Author:kongxx
通常我么在测试一些类的时候需要依赖另外一些类或接口,而此时可能这些类或接口可能仅仅是方法签名而没有真正的实现。此时我们就可以使用一些第三方类库来解决这个问题,比如常用的EasyMock,JMock等。但是这两个类库默认情况下都只能Mock接口,而不能Mock类,那么我们应该怎样解决这个问题呢?其实EasyMock和JMock两个框架也提供了对类作Mock的解决办法,不过这个功能需要他们提供的一个扩展类库才能实现。我们可以在他们的官方网站上下载这两个扩展。对于EasyMock下载EasyMock Class Extension 2.0_Pre-Release,对于JMock下载 jMock/CGLIB extension binary JAR。
下面是一个小例子:
Worker.java一个需要测试的业务类,它依赖一个抽象的Configuration对象.
class package easymock; public class Worker { private Configuration configuration; public Configuration getConfiguration() { return configuration; } public void setConfiguration(Configuration configuration) { this.configuration = configuration; } public boolean execute() { String name = configuration.getName(); String type = configuration.getType(); if(name.equals("System") && type.equals("Snapshot")) { // TODO return true; } return false; } } { public static void main(String[] args) { System.out.println("Hello World!"); } } |
package easymock; import java.io.File; public abstract class Configuration { protected String name; protected String type; public abstract Configuration configurate(File file); public abstract String getName(); public abstract String getType(); } |
package easymock; import junit.framework.TestCase; import org.easymock.classextension.*; public class WorkerTest extends TestCase { private Worker worker; protected void setUp() throws Exception { super.setUp(); worker = new Worker(); } protected void tearDown() throws Exception { super.tearDown(); } /* * Test method for 'easymock.Worker.execute()' */ public void testExecute() { Configuration conf = (Configuration)EasyMock.createMock(Configuration.class); EasyMock.expect(conf.getName()).andReturn("System"); EasyMock.expect(conf.getType()).andReturn("Snapshot"); EasyMock.replay(conf); worker.setConfiguration(conf); // 执行带测试的方法 assertTrue(worker.execute()); } } |
相关文章推荐
- 使用EasyMock扩展为Class提供Mock对象
- 使用JQuery库提供的扩展功能实现自定义方法
- Android 侧边栏(使用Support Library 4提供的扩展组件)
- C# 给系统提供的 Class 添加扩展方法
- php学习之道:php中soap的使用实例以及生成WSDL文件,提供自己主动生成WSDL文件的类库——SoapDiscovery.class.php类
- 侧边栏(使用Support Library 4提供的扩展组件)
- 扩展方法IEnumerable<T>转换为IList<SelectListItem> ,提供@Html.DropDownList使用
- SERVER2008IIS服务器不能正常使用(由于扩展配置问题而无法提供您请求的页面,如果该页面是脚本...)
- [android ui]侧边栏(使用Support Library 4提供的扩展组件)
- php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类
- 微信开发使用wechat.class.php调用API,测试发现返回no access,公众号出现暂时无法提供服务
- php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类
- Java单元测试Junit(三)使用EasyMock扩展Junit
- 侧边栏(使用Support Library 4提供的扩展组件)
- ArcGIS官方提供的使用ConvertFeatureClass方法高效导出数据的代码示例
- 开发PHP扩展-提供一个可以被PHP使用的类
- Jmock-使用ClassImposteriser扩展mock class对象
- 使用JQuery库提供的扩展功能实现自定义方法
- 侧边栏(使用Support Library 4提供的扩展组件)
- php学习之道:php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类