java - 无法完全模拟 RestHighLevelClient
问题描述
我需要模拟 RestHighLevelClient 来测试我的代码。基本上,当我调用 RestHighLevelClient 的“搜索”方法时,我得到 UnfinishedStubbingException 或 WrongTypeOfReturnValue。
PowerMockito.doReturn(searchResponse).when(client.search(searchRequest, RequestOptions.DEFAULT));
此示例引发 UnfinishedStubbingException。
PowerMockito.when(client.search(searchRequest, RequestOptions.DEFAULT)).thenReturn(searchResponse);
此示例抛出 WrongTypeOfReturnValue。
这是我的配置
@RunWith(PowerMockRunner.class)
@PrepareForTest(value = {
RestHighLevelClient.class
...otherClasses
})
我用谷歌搜索了这两个例外,但是,我没有在“thenReturn”方法中调用“mock.someMethod()”。似乎每种方法都行不通。
解决方案
RestHighLevelClient
在抽象中包装访问。使用与使用相同的签名RestHighLevelClient
。最后,模拟抽象。例如:
public interface RestHighLevelClientWrapper {
SearchResponse search(SearchRequest searchRequest, RequestOptions options) throws IOException;
}
@Service
public class RestHighLevelClientWrapperImpl implements RestHighLevelClientWrapper {
private final RestHighLevelClient client;
@Autowired
public RestHighLevelClientWrapperImpl(RestHighLevelClient client) {
this.client = client;
}
@Override
public SearchResponse search(SearchRequest searchRequest, RequestOptions options) throws IOException {
return client.search(searchRequest, options);
}
}
推荐阅读
- java - 连接到 postgresql:致命:数据库“xxx”不存在
- java - 用java调用/保存方法变量
- python - 如何通过 sqlalchemy 从 APScheduler 获取最新数据?
- python - 如何计算列表中有多少附近的相同项目
- itext - ITextRenderer 在生成 pdf 时是否支持 base64 图像?
- r - 测试日期是否是 r 中的假期
- javascript - ReferenceError:在函数 JS 中找不到变量
- batch-file - 根据文件夹的数量制作 x 个选项(选择)
- function - 无法打印完整的字符串数组
- django - login.html重定向后,url、views和templates如何知道他们在处理的是哪个用户?