`

easymock教程-改变同一个方法调用的行为

 
阅读更多

    在easymock中,对于mock对象的同一个方法,可以为每一次的调用定制不同的行为。在record阶段easymock会精确的记录我们录入的行为,基于每一次的方法调用。

 

    这里有一个官网文档中的例子:

    expect(mock.voteForRemoval("Document"))
        .andReturn((
byte42).times(3)
        .andThrow(
new RuntimeException()).times(4)
        .andReturn((
byte-42);

    对于mock.voteForRemoval("Document")方法的调用,.andReturn((byte) 42).times(3) 表明前3次调用将返回42,.andThrow(new RuntimeException()).times(4)表示随后的4次调用(第4,5,6,7次)都将抛出异常,andReturn((byte) -42)表示第8次调用时将返回-42。

 

    我们来验证一下:

public class ChangeBehehaviorTest extends Assert {
    
private static interface Service {
        
public byte voteForRemoval(String name);
    }


    @Test
    
public void testExecute() {
        
final String name = "Document";

        Service mock 
= EasyMock.createMock("service", Service.class);

        EasyMock.expect(mock.voteForRemoval(
"Document")).andReturn((byte42).times(3).andThrow(new RuntimeException())
                .times(
4).andReturn((byte-42);

        EasyMock.replay(mock);

        
for (int i = 0; i < 3; i++{
            assertEquals(
42, mock.voteForRemoval(name));
        }

        
for (int i = 0; i < 4; i++{
            
try {
                mock.voteForRemoval(name);
                fail(
"should throw RuntimeException");
            }
 catch (RuntimeException e) {

            }

        }

        assertEquals(
-42, mock.voteForRemoval(name));
        EasyMock.verify(mock);
    }

}

    测试案例顺利通过。

 

分享到:
评论

相关推荐

    easymock详解教程

    #### 1.14 easymock教程-改变同一个方法调用的行为 在一些测试场景下,可能需要在不同的调用中让同一个方法表现出不同的行为。 - **定义多次调用行为**:可以使用`andReturn`或`andThrow`方法来分别定义不同调用的...

    easymock教程.pdf

    easymock教程 easymock是一种流行的mocking框架,用于单元测试中模拟依赖对象的行为。下面是关于easymock的详细知识点: ### easymock的基本概念 ...* 使用easymock的andThen方法可以改变同一个方法调用的行为。

    easymock教程

    ##### 1.14 改变同一个方法调用的行为 - **动态修改行为**:通过在测试中多次调用`when()`方法,可以在不同的调用之间改变方法的行为。 ##### 1.15 自定义参数匹配器 - **自定义匹配器**:Easymock提供了默认的...

    easymock教程.zip

    - **模拟对象(Mock Object)**:一个没有实际实现的类,用于替代真实的对象,可以预定义其方法的行为。 - **期望(Expectation)**:定义了模拟对象在测试中的行为模式,包括哪些方法会被调用,如何被调用,以及...

    easymock教程[归纳].pdf

    13. **改变同一个方法调用的行为** - 在不同的调用中,Easymock允许为同一方法设定不同的行为,这在处理动态行为的测试时特别有用。 通过深入学习和实践这个Easymock教程,开发者可以更有效地编写单元测试,确保...

    easyMock

    EasyMock 是一个强大的Java模拟框架,它允许开发者在单元测试中创建和控制对象的行为,以模拟复杂的依赖关系。这个框架的出现使得测试更加简洁、独立,可以有效地验证代码的正确性,而无需运行实际的依赖服务或库。...

    easymock2.4+EasyMock使用简明手册.pdf

    本手册主要关注的是EasyMock的2.4版本,这是一个广泛使用的版本,包含了丰富的功能和改进。下面将详细介绍EasyMock 2.4的核心概念、使用方法以及其在单元测试中的重要性。 一、EasyMock基本概念 1. **模拟对象...

    java easymock

    13. **改变同一个方法调用的行为**: 有时,你可能希望同一个方法在不同的调用中有不同的行为,EasyMock提供了这样的灵活性。 通过熟练掌握EasyMock,开发者可以编写更健壮的单元测试,确保代码的质量和稳定性。...

    JMockit基础教程

    例如,你可以设定一个方法在特定条件下返回特定值,或者只允许被调用指定次数。 ### **执行测试** 执行测试阶段涉及创建测试对象和调用待测试的方法。JMockit通过使用`@Test`注解来标识测试方法。在这些方法中,你...

    cglib-2.2.2.rar

    - **MethodInterceptor**:这是CGLib中的一个接口,定义了拦截器的方法`intercept()`,在代理对象调用目标方法时会被触发。 - **Callback**:这是所有CGLib回调接口的基类,包括MethodInterceptor、FixedValue等,...

    JMOCK 帮助 网页 文档

    4. **行为(Actions)**:JMock允许你为模拟对象的方法指定具体的行为,比如返回一个值或执行一个特定的操作。 5. **上下文(Contexts)**:JMock支持上下文对象,这些对象代表了系统的一部分状态。通过在测试中...

    使用PowerMock来Mock静态函数

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

    基于Java探针的Mock框架.zip

    文件名“java0323”可能表示一个关于这个主题的讨论、教程或示例代码,可能是3月23日创建的。要深入学习这个主题,你可以解压文件,查看其中的文档、代码示例或者阅读相关的讲解,这将帮助你更好地理解和运用基于...

    pfnomock:纯函数 vs 模拟

    这意味着如果给一个纯函数相同的参数,它将总是返回相同的结果。 2. 不会改变外部状态。这意味着纯函数不会影响除其返回值之外的任何东西,包括全局变量、数据库记录或网络请求等。 在描述的示例存储库“pfnomock”...

Global site tag (gtag.js) - Google Analytics