首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟私有的最终字段或响应形式的RestHighLevelClient

模拟私有的最终字段或响应形式的RestHighLevelClient
EN

Stack Overflow用户
提问于 2022-03-31 04:00:57
回答 1查看 275关注 0票数 0

我试图为下面的方法编写一个测试用例,我需要模拟从弹性搜索数据库获得的响应。

代码语言:javascript
复制
@Inject
ESEntity mockElasticSearchEntity;
private final RestHighLevelClient restHighLevelClient = OpenSearchRestHighLevelClient.getRestHighLevelClient();

public String getAllMoviesListResult(String index){
    SourceBuilder sourceBuilder = entity.createElasticSearchQueryForGetAllMovieList();
    SearchRequest searchRequest = new SearchRequest(index);
    searchRequest.source(sourceBuilder);

    SearchResponse searchResponse = restHighLevelClient.search(searchRequest,RequestOption.DEFAULT);
    return searchResponse.getHits().get(0);
}

我编写了以下测试用例:代码流到RestHighLevelClient类并返回NullPointException,而不是获得模拟响应。

代码语言:javascript
复制
@InjectMock
ESEntity mockElasticSearchEntity;

@Test
public void testgetAllMoviesListResult(){
    ESEntity elasticSearchEntity = new ESearchEntity();
    SearchSourceBuilder sourceBuilder = elasticSearchEntity.createElasticSearchQueryForGetAllMovieList();
    when(mockElasticSearchEntity.createElasticSearchQueryForGetAllMovieList()).thenReturn(sourceBuilder);
    
    String esReponse ="";
    JsonXContentParser xContentParser = new JsonXContentParser(NamedXContentRegistry.EMPTY, DeprecationHandler.THROW_UNSUPPORTED_OPERATION, new JsonFactory().createParser(esResponse));
    SearchResponse searchResponse = SearchResponse.fromXContent(xContentParser);

    RestHighLevelClient mockRestHighLevelClient = mock(RestHighLevelClient.class);
    when(mockRestHighLevelClient.search(any(),any())).thenReturn(searchResponse);
    
    String actualResponse = new EntityService().getAllMoviesListResult("someIndex");
    
}

我搜索了类似的问题,但这需要使用PowerMock,我目前使用的框架不支持它。

更新

代码语言:javascript
复制
public class OpenSearchRestHighLevelClient {

    private static RestHighLevelClient restHighLevelClient = null;
    
    public static RestHighLevelClient getRestHighLevelClient() {     
        //singleton implementation on receiving the RestHighLevelClient.
        if(restHighLevelClient==null) {
            restHighLevelClient = createRestHighLevelClient();
        }
        return restHighLevelClient;
    }
    
    public static RestHighLevelClient createRestHighLevelClient(){
        //logic to create RestHighLevelClient
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-31 06:09:05

有一个解决办法,您可以使用模拟静态(签出) RestHighLevelClient来模拟创建https://mvnrepository.com/artifact/org.mockito/mockito-inline对象的静态方法。

我正在使用Gradle testImplementation 'org.mockito:mockito-inline:3.4.6',这对我有用,让我知道

代码语言:javascript
复制
    @Test
    public void testgetAllMoviesListResult() {
        ESEntity elasticSearchEntity = new ESearchEntity();
        SearchSourceBuilder sourceBuilder = elasticSearchEntity.createElasticSearchQueryForGetAllMovieList();
        when(mockElasticSearchEntity.createElasticSearchQueryForGetAllMovieList()).thenReturn(sourceBuilder);

        String esReponse = "";
        JsonXContentParser xContentParser = new JsonXContentParser(NamedXContentRegistry.EMPTY, DeprecationHandler.THROW_UNSUPPORTED_OPERATION, new JsonFactory().createParser(esResponse));
        SearchResponse searchResponse = SearchResponse.fromXContent(xContentParser);

        RestHighLevelClient mockRestHighLevelClient = mock(RestHighLevelClient.class);
        when(mockRestHighLevelClient.search(any(), any())).thenReturn(searchResponse);
        
        try (MockedStatic<OpenSearchRestHighLevelClient> openSearchRestHighLevelClient = mockStatic(OpenSearchRestHighLevelClient.class)) {
            openSearchRestHighLevelClient.when(OpenSearchRestHighLevelClient::getRestHighLevelClient).thenReturn(mockRestHighLevelClient);
            String actualResponse = new EntityService().getAllMoviesListResult("someIndex");
            assertEquals(expectedResponse, actualResponse);
        }

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71686750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档