`
aijuans8
  • 浏览: 193164 次
社区版块
存档分类
最新评论

使用EasyMock扩展为Class提供Mock对象

 
阅读更多

使用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对象.

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!");
}
}

Configuration.java一个抽象类,会有一些子类来实现它的抽象方法.

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();
}

WorkerTest.java一个测试类,需要用到Configuration对象实例,这里Mock了一个Configuration对象用来为execute方法提供支持.

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());
}

}


运行JUnit测试,GreenBar。OK!

分享到:
评论

相关推荐

    easymock教程

    - **创建Mock对象**:使用Easymock框架提供的工具类创建Mock对象。 - **定义行为**:在Record阶段,通过调用Mock对象的方法来定义其行为。 - **激活Mock对象**:在Replay阶段,激活Mock对象使其能够按照定义好的行为...

    EasyMock 使用方法与原理剖析

    1. **生成 Mock 对象**:使用EasyMock的`createMock()`方法,指定需要Mock的接口或类,如`EasyMock.createMock(java.sql.ResultSet.class)`。 2. **设置预期行为**:通过`expect()`方法,定义Mock对象在测试期间...

    EasyMock与Mockito 使用

    - 使用`Mockito.mock(Class)`创建模拟对象。 - 使用`when(mockObject.someMethod()).thenReturn(someValue)`来设置方法的返回值。 - 测试时直接使用模拟对象,无需`replay`和`verify`步骤。 2. **高级特性** - ...

    EasyMock

    例如,如果你有一个名为`MyInterface`的接口,你可以这样创建它的模拟对象:`MyInterface mock = EasyMock.createMock(MyInterface.class);` 2. **定义预期**:接着,你需要使用`expect()`方法设置模拟对象的方法...

    转:EasyMock 单元测试

    在 EasyMock 中,你可以通过扩展 `EasyMock` 类或使用 `createMock()` 方法来创建 mock 对象。例如,如果你有一个名为 `MyService` 的接口,你可以这样创建它的 mock 实例: ```java MyService myServiceMock = ...

    easymock资料和源代码实例

    2. **创建模拟对象**:使用`EasyMock.createMock()`方法创建模拟对象,如`MyInterface mockObject = EasyMock.createMock(MyInterface.class);` 3. **设置期望**:利用`EasyMock.expect()`方法设置模拟对象的行为,...

    easymock3.2 (文档+源码+例子)

    4. **扩展(Extensions)**:Easymock 3.2包含了ClassExtension,它允许你模拟final类和非接口类型。这在很多情况下非常有用,因为有些库可能使用了final类或者非接口设计,而Easymock通过扩展可以支持这类场景的...

    EasyMock 实例

    此外,还可以结合使用EasyMock的扩展如ClassExtension,它支持模拟静态方法和final类。 在编写测试时,合理地使用EasyMock可以帮助你专注于测试目标代码的逻辑,而不是被依赖的外部系统。通过精确控制模拟对象的...

    EasyMock.jar

    7. **静态方法模拟**:虽然EasyMock主要针对实例方法的模拟,但它也提供扩展机制(如使用EasyMock Class Extension)来模拟静态方法。 8. **类型安全**:EasyMock 2.5.1版可能已经提供了类型安全的API,这使得在...

    Learning EasyMock3.0 By Official Example

    - EasyMock Class Extension:允许对静态方法和 final 类进行模拟,扩展了 EasyMock 的使用范围。 - Callbacks:可以指定当模拟对象被调用时执行的回调函数,实现自定义行为。 - Partial Mocking:只对部分方法进行...

    easyMock.zip

    此外,EasyMock还有扩展,如EasyMock Class Extension,它可以自动管理模拟对象的生命周期,使测试代码更简洁。另外,EasyMock还支持Mockito的注解风格,使得测试代码更易读。 在实际项目中,使用EasyMock可以提高...

    Easymock mock 异常处理的模拟代码

    在Easymock中,我们通常会使用`EasyMock.createMock()`方法来创建模拟对象,然后使用`expect()`方法设置模拟对象的行为。例如,如果我们有一个名为`MyClass`的类,它有一个可能抛出异常的方法`doSomething()`,我们...

    mock学习交流

    使用Mockito,你可以声明一个对象为Mock,然后设置它的行为,比如当调用某个方法时返回特定值或者触发某些动作。下面是一个简单的Mockito示例: ```java import static org.mockito.Mockito.*; // 创建Mock对象 ...

    EasyMock and PowerMock入门PPT

    EasyMock是一个强大的Java库,用于创建模拟对象(Mock Objects),它使得单元测试变得更加简单。在测试过程中,模拟对象可以替代真实的依赖,这样我们就可以专注于测试单个方法,而不用担心其他部分的复杂性。...

    easymock 学习

    1. **模拟对象(Mock Object)**:EasyMock 创建的模拟对象用于代替真实的依赖,可以预定义其行为和预期调用。 2. **期望(Expectations)**:在测试中,你需要设定模拟对象应如何响应特定的调用,这称为期望。例如...

    powermock-easymock-junit-1.5.4.zip

    3. 使用PowerMock创建需要模拟的对象,例如`PowerMockito.mockStatic(YourClass.class)`。 4. 使用EasyMock或Mockito定义模拟对象的行为和期望。 5. 使用JUnit的@Test注解编写测试用例,运行测试。 总的来说,...

    powermock-easymock-junit-1.6.1.zip

    EasyMock是一个模拟框架,它允许开发者创建预期的交互(mock objects)并验证对象之间如何进行通信。通过创建mock对象,我们可以设定对象的行为,比如期望调用的方法、参数和返回值。这种方法在测试时非常有用,因为...

    EasyMock教学

    同时,EasyMock还提供了扩展功能,如EasyMock Class Extension,可以帮助自动管理模拟对象的生命周期,简化测试代码。 总之,EasyMock 是一个强大而灵活的工具,它使得Java开发者能够在单元测试中有效地隔离依赖,...

    使用PowerMock来Mock静态函数

    PowerMock是一个强大的扩展工具,它可以与Mockito、EasyMock等主流Mock框架结合,允许我们模拟静态方法、构造器、final类和方法、删除静态初始化器等。 标题“使用PowerMock来Mock静态函数”指的是如何利用...

Global site tag (gtag.js) - Google Analytics