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");
Конечно, attendStartConditions
и executeOnTracerControllerScope
будут вызываться по-настоящему.
Если после вашего комментария выхотите издеваться 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);
}