如何使用EasyMock.capture捕获传入的参数?

时间:2017-03-24 08:50:51

标签: java junit easymock

我正在测试一个类,并希望监视对特定方法的调用,即保存调用参数以供以后分析。

使用EasyMock进行测试,因此使用EasyMock.capture功能是合乎逻辑的。但是,我设法找到的示例对我不起作用 - 我在 capture 的行中得到以下编译错误:

EasyMock中的

expect(T)无法应用于(void) 原因:没有类型变量T的实例存在,因此void符合T

如果有人可以为我指出我的错误,那就太好了。以下是代码段:

import static org.easymock.EasyMock.capture;

import org.easymock.Capture;
import org.easymock.CaptureType;
import org.easymock.EasyMock;
import org.junit.Before;

class B {

}

class A {
    public void doSomething(B input) {

    }
}

public class ATest {
    private Capture<B> capturedData;
    private A testObject;

    @Before
    private void setUp() {
        capturedData = EasyMock.newCapture(CaptureType.ALL);
        testObject = EasyMock.createNiceMock(A.class);
        EasyMock
                .expect(testObject.doSomething(capture(capturedData)))
                .anyTimes();
    }
}

提前多多感谢!

1 个答案:

答案 0 :(得分:1)

您的问题与捕获有关,但与doSomething()方法的返回类型无关:

由于A.doSomething(B input)的返回类型为void,因此您不希望该方法返回任何内容,因此您无法使用EasyMock.expect()。相反,只需调用该方法并使用EasyMock.expectLastCall(),如下所示:

testObject.doSomething(capture(capturedData));
EasyMock.expectLastCall().anyTimes();

EasyMock.expectLastCall()声明您希望执行expectLastCall()之前的最后一个方法调用。然后,您可以像expect()一样处理它,例如添加anyTimes()