mokito怎么mock好几层的service
时间: 2024-02-06 10:09:57 浏览: 68
当需要 mock 多层嵌套的 Service 时,我们可以使用 Mockito 的链式调用来逐层 mock。
例如,假设有三个 Service:ServiceA、ServiceB 和 ServiceC。其中 ServiceA 调用了 ServiceB 的方法,而 ServiceB 又调用了 ServiceC 的方法。我们想要测试 ServiceA 的一个方法,但是需要 mock 掉 ServiceB 和 ServiceC 的方法。
代码示例:
```
public class ServiceA {
private ServiceB serviceB;
public ServiceA(ServiceB serviceB) {
this.serviceB = serviceB;
}
public void methodToTest() {
// ...
serviceB.methodInServiceB();
// ...
}
}
public class ServiceB {
private ServiceC serviceC;
public ServiceB(ServiceC serviceC) {
this.serviceC = serviceC;
}
public void methodInServiceB() {
// ...
serviceC.methodInServiceC();
// ...
}
}
public class ServiceC {
public void methodInServiceC() {
// ...
}
}
```
我们可以使用 Mockito 的链式调用来 mock ServiceB 和 ServiceC 的方法:
```
@Test
public void testMethodInServiceA() {
ServiceC mockedServiceC = mock(ServiceC.class);
ServiceB mockedServiceB = mock(ServiceB.class);
when(mockedServiceB.methodInServiceB()).thenAnswer(invocation -> {
mockedServiceC.methodInServiceC();
return null;
});
ServiceA serviceA = new ServiceA(mockedServiceB);
serviceA.methodToTest();
// ...
}
```
在这个例子中,我们首先创建了 ServiceC 的 mock 对象 mockedServiceC 和 ServiceB 的 mock 对象 mockedServiceB。然后我们使用 when().thenAnswer() 的方式来 mock ServiceB 的 methodInServiceB() 方法,当该方法被调用时,我们先调用 mockedServiceC 的 methodInServiceC() 方法,然后返回 null。这样就可以 mock 掉 ServiceB 和 ServiceC 的方法,同时测试 ServiceA 的 methodToTest() 方法了。
阅读全文