EasyMock.capture如何抓取传入参数?

How to capture incoming parameters with EasyMock.capture?

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

测试是使用 EasyMock, so it was logical to use 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();
    }
}

提前致谢!

您的问题与捕获无关,而是与您的 doSomething() 方法的 return 类型有关:

由于 A.doSomething(B input) 属于 return 类型 void,您不希望该方法 return 任何东西,因此您不能将 EasyMock.expect() 用于它。相反,只需调用该方法并使用 EasyMock.expectLastCall(),如下所示:

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

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