我需要模拟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()”。似乎每种方法都行不通。

最佳答案

这是Elasticsearch存储库中的开放issue。我所能做的是以下几点:

@Mock
private RestHighLevelClient restHighLevelClient;
@Before
public void setup() {
   restHighLevelClient = mock(RestHighLevelClient.class);
}

然后使用它如下
when(elasticClientHandler.createRestClient())
   .thenReturn(restHighLevelClient);

10-06 06:06