如何在更新时使用mockito for elasticSearchClient?

cwtwac6a  于 2022-11-22  发布在  ElasticSearch
关注(0)|答案(1)|浏览(137)

请注意,客户端为RestHightLevelClient,

@Override
public void createAlias(final String aliasName, final String indexName, final boolean writable)
        throws IOException {
    IndicesAliasesRequest request = new IndicesAliasesRequest(); 
    AliasActions aliasAction = new AliasActions(AliasActions.Type.ADD).index(indexName)
          .alias(aliasName);
    if (writable) {
       aliasAction.writeIndex(true);
    }
    request.addAliasAction(aliasAction); 
    AcknowledgedResponse response = client.indices().updateAliases(request, RequestOptions.DEFAULT);
}

我尝试为此编写测试用例:

@Test
void testCreateAlias() throws IOException {
    AcknowledgedResponse response = AcknowledgedResponse.of(true);
    when(client.indices().updateAliases(Mockito.mock(IndicesAliasesRequest.class), RequestOptions.DEFAULT))
            .thenReturn(response);
    searchManagerService.createAlias("test", "test_idx", true);
}

错误:client.indexs()为空,
如何解决这一问题?

a64a0gku

a64a0gku1#

模拟client.indices()以返回一个模拟的IndicesClient示例。然后模拟IndicesClient updateAliases方法以返回响应。

var mockedIndicesClient = Mockito.mock(IndicesClient.class);
when(client.indices()).thenReturn(mockedIndicesClient);
when(mockedIndicesClient.updateAliases(Mockito.mock(IndicesAliasesRequest.class), RequestOptions.DEFAULT)).thenReturn(response);

另外,我相信您希望在最后一行中使用匹配器。any(IndicesAliasesRequest.class)而不是Mockito.mock:

when(mockedIndicesClient.updateAliases(any(IndicesAliasesRequest.class), RequestOptions.DEFAULT)).thenReturn(response);

相关问题