我需要模拟RestHighLevelClient来测试我的代码。基本上,当我调用RestHighLevelClient的"search“方法时,我得到的是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()”。似乎每种方法都不起作用。
发布于 2019-10-10 07:56:09
它是elasticsearch repo中的一个开放的issue。我能做的只有以下几点:
@Mock
private RestHighLevelClient restHighLevelClient;
@Before
public void setup() {
restHighLevelClient = mock(RestHighLevelClient.class);
}然后使用它,如下所示
when(elasticClientHandler.createRestClient())
.thenReturn(restHighLevelClient);发布于 2020-10-20 00:36:57
嗯,根据comment的说法,最好的解决方案是创建包装委托服务并模拟它,而不是模拟整个RestHighLevelClient的事情(我相信你没有使用所有现有的方法)
发布于 2021-04-20 19:24:04
可以使用PowerMockito模拟RestHighLevelClient。我们可以像下面这样做。
public class ElasticSearchService{
private RestHighLevelClient client;
}
@RunWith(PowerMockRunner.class)
@PrepareForTest({ ElasticSearchService.class, RestHighLevelClient.class,OtherClasses.. })
public class ElasticSearchServiceTest {
RestHighLevelClient restHighLevelClient ;
@Before
public void setup() {
esInstance = new ElasticSearchService();
//Mock client here and set it to the instance of class to be tested
restHighLevelClient = PowerMockito.mock(RestHighLevelClient.class);
esInstance.setClient(restHighLevelClient);
}
}https://stackoverflow.com/questions/56547106
复制相似问题