首页 > 解决方案 > 使用 mockito 在 Elastic 中模拟聚合

问题描述

我有一个从 searchResponse 映射产品的方法。映射时我使用全局、过滤器和嵌套

    Global globalAggregation = searchResponse.getAggregations().get(FACETS);
    Filter filterAgg = globalAggregation.getAggregations().get(GENERAL_AGGREGATION);
    Nested agg = filterAgg.getAggregations().get(facetAttribute);

我可以使用 stub json 为上述代码编写单元测试,效果很好,但维护它变得很困难。有没有更好的方法来为这样的场景编写单元测试用例,我们可以直接模拟它们。

这是我尝试过的。

 SearchResponse searchResponse = mock(SearchResponse.class);
   Aggregations aggregations = mock(Aggregations.class);
   Global global= mock(Global.class);
   when(searchResponse.getAggregations().get("facet")).thenReturn(global);

最后一行不起作用,有没有更好的处理方法?

标签: unit-testingelasticsearchjunit

解决方案


我认为您需要模拟searchResponse.getAggregations()方法调用。你可以试试这样的东西吗?

when(searchResponse.getAggregations()).thenReturn(aggregations);
when(aggregations.get("facet")).thenReturn(global)

推荐阅读