java - Mockito 让 mock 从现有的 mock 继承存根
问题描述
我有两个来自同一类的模拟对象,两个对象之间的唯一区别是不同的状态。在我可以测试状态差异之前,我需要存根一些方法,这意味着我必须为这两个对象都做这件事,这对我来说似乎效率不高。
我对 java 的单元测试有以下设置:
@Mock
private CuratorFramework zkClient;
@Mock
private CuratorFramework zkClientNotStarted;
@BeforeEach
void beforeEach() {
when(zkClient.getState()).thenReturn(CuratorFrameworkState.STARTED);
when(zkClient.checkExists()).thenReturn(existsBuilder);
when(zkClient.exampleMethod()).thenReturn(exampleObject);
...
when(zkClientNotStarted.getState()).thenReturn(CuratorFrameworkState.LATENT);
when(zkClientNotStarted.checkExists()).thenReturn(existsBuilder);
when(zkClientNotStarted.exampleMethod()).thenReturn(exampleObject);
...
}
这让我很不爽,因为有很多重复的代码,找不到类似这样的东西:
@Mock
private CuratorFramework zkClient;
@Mock
private CuratorFramework zkClientNotStarted;
@Mock
private CuratorFramework zkClientBase;
@BeforeEach
void beforeEach() {
when(zkClientBase.checkExists()).thenReturn(existsBuilder);
when(zkClientBase.checkExists()).thenReturn(existsBuilder);
when(zkClientBase.exampleMethod()).thenReturn(exampleObject);
...
zkClient.inheritStubs(zkClientBase)
when(zkClient.getState()).thenReturn(CuratorFrameworkState.STARTED);
zkClientNotStarted.inheritStubs(zkClientBase);
when(zkClientNotStarted.getState()).thenReturn(CuratorFrameworkState.LATENT);
}
有没有办法将模拟克隆/复制到继承初始化存根的新模拟?或者这是 Mockito 框架的错误用例?
我发现的唯一类似问题是这个:Mockito: Mock object based on another 5 多年前就有人问过这个问题。我希望在那段时间有所改变。
解决方案
推荐阅读
- python - Python 打印嵌套列表的内存地址而不是列表内容
- google-maps - Google Roads API 的 Nearest Roads 函数返回的点数多于给定点,包含重复项
- java - 如何在分页中获得总结果数
- javascript - 在 React 组件中存储多个引用与通过 ID 查询 DOM
- c# - 如果分隔符是一个或多个空格,如何拆分字符串?
- sql - SQL Select 在具有 25M 记录的表上花费太多时间
- typo3 - Typo3 将 7.6.31 升级到 8.7.19 / 数据库分析器失败
- python - 将 tf.Keras 与 TensorFlow 优化器一起使用
- python - 获取依赖文件以在 Binder 上托管 Jupyter 笔记本?
- vue.js - 路线无效(Vue.js)