如何使用EasyMock和PowerMock模拟消费者参数
我有一个测试场景,需要模拟一个使用者参数 在以下代码中,如何使用EasyMock和PowerMock模拟消费者参数,powermock,easymock,Powermock,Easymock,我有一个测试场景,需要模拟一个使用者参数 在以下代码中,startTracer是要测试的方法 类跟踪服务{ 专用跟踪控制器; public void startTracer(字符串tracerName,对象参数1){ if(AttentStartConditions(tracerName,param1)){ ExecuteonCtracerControllerScope(tracerController->tracerController.startTracer(param1)); } } ..
startTracer
是要测试的方法
类跟踪服务{
专用跟踪控制器;
public void startTracer(字符串tracerName,对象参数1){
if(AttentStartConditions(tracerName,param1)){
ExecuteonCtracerControllerScope(tracerController->tracerController.startTracer(param1));
}
}
...
}
基本上,我想测试tracerController.startTracer(param1)是否将param1
作为参数接收
Capture method1Param1=newCapture();
tracerController.startTracer(捕获(方法1参数1));
expectLastCall().once();
...
tracerService.startTracer(“测试”、“值1”);
资产(method1Param1.getValue()).isEqualsTo(“value1”);
如何为该
executeOnTracerControllerScope
executetracerController.startTracer
配置EasyMock/PowerMock,而无需调用其内部代码?tracerController
是一个模拟。所以它不会被调用startTracer
。按照现在的定义,它将什么也不做。执行您要求的操作的代码应该是这样的:
Capture<Object> method1Param1 = newCapture();
tracerController.startTracer(capture(method1Param1)); // no need for the expect, it's the default
replay(tracerController);
// ...
tracerService.startTracer("TEST", "value1");
assertThat(method1Param1.getValue()).isEqualsTo("value1");
好的,但除此之外,假设我不想从TracerService创建一个部分模拟(以测试
startTrace
方法)。在这种情况下,有一些方法可以模拟方法executeOnTracerControllerScope
?
public class MyTest {
@Test
public void test() {
TracerController tracerController = mock(TracerController.class);
TracerService service = partialMockBuilder(TracerService.class)
.withConstructor(tracerController)
.addMockedMethod("executeOnTracerControllerScope")
.mock();
replay(tracerController);
service.startTracer("tracer", "param");
}
}
class TracerService {
private final TracerController tracerController;
public TracerService(TracerController tracerController) {
this.tracerController = tracerController;
}
public boolean attendStartConditions(String tracerName, Object param1) {
return true;
}
public void executeOnTracerControllerScope(Consumer<TracerController> tracer) {
tracer.accept(tracerController);
}
public void startTracer(String tracerName, Object param1) {
if (attendStartConditions(tracerName, param1)) {
executeOnTracerControllerScope(tracerController -> tracerController.startTracer(param1));
}
}
}
interface TracerController {
void startTracer(Object param1);
}