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()
。
我正在测试一个 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()
。