【问题标题】:How do I test a function which returns a complex object?如何测试返回复杂对象的函数?
【发布时间】:2020-11-01 13:11:57
【问题描述】:

我正在尝试在 java 中测试一个函数,它可以帮助我在 elasticsearch 中创建一个 bool 查询并返回一个 QueryBuilder 对象。

public QueryBuilder getBoolQueryForRequest(request) {

    // .. bool query creation logic

    return boolQuery;
}

查询创建的逻辑很复杂,因此涉及到可以针对此函数的返回值断言的对象。我应该如何进行测试?

link 谈到将 QueryBuilder 转换为字符串查询然后进行比较,但同样,测试原始代码的唯一方法是使用原始代码创建对象,这有点像 catch-22对我来说..

【问题讨论】:

  • 在您的测试中有一个静态字符串和查询的预期字符串表示是可以的。然后,测试将防止更改结果(例如重构)。

标签: java elasticsearch testing mockito elasticsearch-java-api


【解决方案1】:

IHMO,为已构建的 Elastic 查询编写单元测试没有真正意义。
这就像您想要测试 JPA 查询,而不是针对数据库返回的响应,而是针对查询的文本。
如何确保在对 ElasticSearch 数据库执行时它是正确的,并且在语法方面也是有效的?

我认为与数据库查询类似,弹性查询测试作为集成测试更有意义。
不幸的是,我没有机会在我工作的 Elastic 开发人员中进行设置,但您可以得到一些反馈 here 和来自 post 的一些想法:

使用 elasticsearch 已有的 Gradle 工具。你可以读一些 关于这里的信息: https://github.com/elastic/elasticsearch/issues/21119620

使用 Maven 插件: https://github.com/alexcojocaru/elasticsearch-maven-plugin785

使用 Ant 脚本,例如 http://david.pilato.fr/blog/2016/10/18/elasticsearch-real-integration-tests-updated-for-ga

使用 Docker:https://www.testcontainers.org/modules/elasticsearch

在 Maven 中使用 Docker: https://github.com/dadoonet/fscrawler/blob/e15dddf72b1ed094dad279d492e4e0314f73683f/pom.xml#L241-L28992

【讨论】:

  • 我发现有些链接坏了。
  • 对。我认为现在已修复。
猜你喜欢
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 2016-12-26
  • 2023-03-22
  • 2016-11-18
相关资源
最近更新 更多