具有弹性后端的单元测试休眠搜索

Unit testing hibernate search with elastic backend

我们将休眠搜索及其 orm 映射器与 JPA 一起用于我们基于 Java 的搜索服务。我面临的挑战是编写单元测试,例如:

为此,我的第一个想法是 运行 某种内存中的单节点弹性集群,针对该集群进行测试,然后将其拆除。不过好像没有这个东西

官方文档 (https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/) 没有解释休眠搜索的单元测试。

现在我很好奇您如何测试您的休眠搜索实现。我需要一个测试实例吗?您是否重命名用于测试的索引并在每次测试前清除它 运行?

我很感激每一个输入!

我不会将这些称为“单元”测试,因为您还要测试与另一软件 (Elasticsearch) 的集成。你正在做的是,IMO,显然是集成测试。

在测试中启动 Elasticsearch 的最简单方法可能是使用 TestContainers:

如果你使用Quarkus, it's even easier as Quarkus will spin up an Elasticsearch instance automatically for your tests, thanks to Dev Services.

至于 initializing/resetting 你的索引,这取决于你如何 运行 你的测试。

如果您为每个测试启动整个应用程序,您可以利用 automatic schema management 让 Hibernate Search 重置 startup/tear-down 上的索引:只需将 hibernate.search.schema_management.strategy 设置为 drop-and-create-and-drop 在您的测试配置中。

如果您只为整个测试 class(通常 Spring 测试就是这种情况)或测试套件启动一次应用程序,那么您可以添加使用 JUnit 注释的方法 @Before/@After 使用 Hibernate Search schema management API 在每次测试之前或之后手动 re-create 索引。 JUnit 提供了多种方式来一次性编写此类代码并在所有测试中重复使用它:JUnit 4 中的“规则”、JUnit 5 中的“扩展”……但这需要更多的 JUnit 专业知识。