Pat*_*tty 1 java spring mockito spring-boot
我正在使用 JDK 11 和 Spring Boot。我正在实现一个 REST API,有 3 层:
我在数据访问层有针对接口的类,并且在服务层没有任何接口。
我使用 MockMvc、Mockito 等编写集成测试,以测试控制器公开的每个点的整个路径。直到我尝试在服务层引入接口,这才成为问题。
最初,我只嘲笑存储库/Daos。所以类结构如下:
public interface ClientRepo{
......
}
public class ClientRepoImpl implements ClientRepo{
......
}
Run Code Online (Sandbox Code Playgroud)
将返回的数据模拟为:
@MockBean
private ClientRepo client;
....
Mockito.when(client.isExistFkUnitId(Mockito.any(UUID.class))).thenReturn(false);
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都很好。
现在我在服务层引入了接口:
public interface ClientService{
......
}
public class ClientServiceImpl implements ClientService{
......
}
Run Code Online (Sandbox Code Playgroud)
并尝试(尝试调用实际的服务方法):
@MockBean
private ClientService clientService;
....
Mockito.when(clientService.isExistFkUnitId(Mockito.any())).thenCallRealMethod();
Run Code Online (Sandbox Code Playgroud)
但始终只得到 null。
有没有办法让真正的方法调用保持接口不变?
我认为您想在要调用真实方法的字段上使用@Spy注释而不是注释。@Mock不过,我碰巧没有例子来验证这一点。
https://javadoc.io/doc/org.mockito/mockito-core/2.21.0/org/mockito/Spy.html
然后你就可以做doCallRealMethod().when(clientService.isExistFkUnitId(Mockito.any()))。因为使用间谍对象,您可以调用doReturn/when而不是when/doReturn.
https://javadoc.io/doc/org.mockito/mockito-core/2.21.0/org/mockito/Mockito.html#do_family_methods_stubs
| 归档时间: |
|
| 查看次数: |
13155 次 |
| 最近记录: |