如何测试 returns 复杂对象的函数?

How do I test a function which returns a complex object?

我正在尝试测试 java 中的一个函数,它帮助我在 elasticsearch 中创建一个 bool 查询和 return 一个 QueryBuilder 对象。

public QueryBuilder getBoolQueryForRequest(request) {

    // .. bool query creation logic

    return boolQuery;
}

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

这个link讲的是将QueryBuilder转换为字符串查询然后比较,但是同样,测试原代码的唯一方法是使用原代码创建对象,这是一种对我来说是第 22 条军规..

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

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

Use the Gradle tools elasticsearch already has. You can read some information about this here: https://github.com/elastic/elasticsearch/issues/21119 620

Use the Maven plugin: https://github.com/alexcojocaru/elasticsearch-maven-plugin 785

Use Ant scripts like http://david.pilato.fr/blog/2016/10/18/elasticsearch-real-integration-tests-updated-for-ga

Using Docker: https://www.testcontainers.org/modules/elasticsearch

Using Docker from maven: https://github.com/dadoonet/fscrawler/blob/e15dddf72b1ed094dad279d492e4e0314f73683f/pom.xml#L241-L28992