【问题标题】:How to capture incoming parameters with EasyMock.capture?如何使用 EasyMock.capture 捕获传入的参数?
【发布时间】:2017-03-24 17:22:29
【问题描述】:

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

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

EasyMock 中的expect(T) 不能应用于 (void) 原因:不存在类型变量 T 的实例,因此 void 符合 T

如果有人能为我指出我的错误,那就太好了。下面是一段代码sn-p:

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

提前非常感谢!

【问题讨论】:

    标签: java junit easymock


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-09
      • 2016-10-09
      • 2012-05-13
      • 2010-10-24
      • 2011-09-16
      • 2020-10-20
      • 1970-01-01
      • 2018-02-12
      相关资源
      最近更新 更多