Easymock存根辅助方法

时间:2014-11-07 00:23:47

标签: java methods helper easymock stub

我正试图找到一种方法来使用EasyMock来测试类Foo中的方法execute(),期望该方法调用Mock对象中的方法的次数,但是忽略了当通过方法execute()调用时,同一类Foo的辅助方法调用mock对象中的相同方法。因为我有其他测试方法来测试帮助器方法,并且只想将我的测试限制为一个方法,而不是在同一个类中调用其他方法。

我现在拥有它的方式,测试会失败,因为cust.getAccount()由execute(),method1()和method2()执行超过1次。

例如:

测试中的课程

public class Foo{

    private Customer cust;   <<< this will be mocked

    public void execute(){
        cust.getAccount();  <<< this will be expected as 1 for execute()
        ...
        ...
        method1();  <<< calling helper method 1
        ...
    }

    protected method1(){
        for (...){
            cust.getAccount();
        }

        method2();   <<< calling helper method 2
    }

    method 2(){
        cust.getAccount();
    }

}

测试类

public class TestFoo{

    @Test
    public void testExecute(){
        Customer custMock = createMock(Customer.class);     
        expect(custMock.getAccount()).andReturn("1111").times(1);
        replay(custMock);

        Foo foo = new Foo();
        foo.execute();
    }
}

我已经调查了andStubReturn(),但还没有完全理解它。

谢谢大家的指导。

1 个答案:

答案 0 :(得分:0)

EasyMock允许通过EasyMock.createMockBuilder方法进行部分模拟。通过流畅的界面,您可以定义要模拟的方法。

并且不要忘记在最后调用EasyMock.verify,否则你不会遇到预期方法调用的情况,但实际上该方法永远不会被调用。

@Test
public void testExecute(){
    Customer custMock = createMock(Customer.class);     
    expect(custMock.getAccount()).andReturn("1111").times(1);
    replay(custMock);

    Foo foo = EasyMock.createMockBuilder(Foo.class)
                      .addMockedMethod("method1")
                      .addMockedMethod("method2")
                      .createMock();
    foo.execute();

    verify(custMock);
}