【问题标题】:Mock Elasticsearch Aggregation模拟 Elasticsearch 聚合
【发布时间】:2019-10-27 21:49:32
【问题描述】:

我有一个问题应该比较直截了当,但我发现自己陷入了一个很深的兔子洞

我想对我对 Elasticsearch 的调用进行单元测试 - 搜索请求包括 aggs。模拟响应的好方法是什么?

Elasticsearch RestHighLevelClient 非常复杂...必须处理复杂的 XContentType/XContentType 解析器调用链网络

有没有简单的方法来模拟调用?如果我们从 Kibana Devtools 调用 ES,我会收到示例 JSON 响应

private fun searchResponseFromContent(content: String): SearchResponse {
    val xContentType = XContentType.JSON
    val parser = xContentType.xContent().createParser(
            NamedXContentRegistry.EMPTY, // this would not handle aggrgations
            null,
            content
    )
    return SearchResponse.fromXContent(parser)
}

一般来说,人们不会在他们的单元测试中测试 Elasticsearch 调用吗?模拟对 ES 的调用似乎没有任何好的解决方案

【问题讨论】:

    标签: unit-testing elasticsearch


    【解决方案1】:

    答案只是简化RestHighLevelClient 在内部所做的事情:

    private fun searchResponseFromContent(content: String): SearchResponse {
        val xContentType = XContentType.JSON
        val parser = xContentType.xContent().createParser(
                NamedXContentRegistry(namedXContentRegistry()),
                null,
                content
        )
        return SearchResponse.fromXContent(parser)
    }
    
    private fun namedXContentRegistry(): List<NamedXContentRegistry.Entry> {
        // add as needed from RestHighLevelClient:1748 on version 7.3.2
        // static List<NamedXContentRegistry.Entry> getDefaultNamedXContents()
        return listOf(
                NamedXContentRegistry.Entry(Aggregation::class.java, ParseField(HistogramAggregationBuilder.NAME), ContextParser { p, c ->
                    ParsedHistogram.fromXContent(p, c as String)
                })
        )
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-24
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多