具有弹性后端的单元测试休眠搜索
Unit testing hibernate search with elastic backend
我们将休眠搜索及其 orm 映射器与 JPA 一起用于我们基于 Java 的搜索服务。我面临的挑战是编写单元测试,例如:
- 插入JPA实体车“tesla v3”
- 搜索“特斯拉”
- 验证 JPA 实体“tesla v3”是否包含在休眠搜索的结果集中
为此,我的第一个想法是 运行 某种内存中的单节点弹性集群,针对该集群进行测试,然后将其拆除。不过好像没有这个东西
官方文档 (https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/) 没有解释休眠搜索的单元测试。
现在我很好奇您如何测试您的休眠搜索实现。我需要一个测试实例吗?您是否重命名用于测试的索引并在每次测试前清除它 运行?
我很感激每一个输入!
我不会将这些称为“单元”测试,因为您还要测试与另一软件 (Elasticsearch) 的集成。你正在做的是,IMO,显然是集成测试。
在测试中启动 Elasticsearch 的最简单方法可能是使用 TestContainers:
- 以下是启动 Elasticsearch 容器的方法:https://www.testcontainers.org/modules/elasticsearch/
- 以下是在 JUnit 4 中的实现方法:https://www.testcontainers.org/test_framework_integration/junit_4/
如果你使用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 专业知识。
我们将休眠搜索及其 orm 映射器与 JPA 一起用于我们基于 Java 的搜索服务。我面临的挑战是编写单元测试,例如:
- 插入JPA实体车“tesla v3”
- 搜索“特斯拉”
- 验证 JPA 实体“tesla v3”是否包含在休眠搜索的结果集中
为此,我的第一个想法是 运行 某种内存中的单节点弹性集群,针对该集群进行测试,然后将其拆除。不过好像没有这个东西
官方文档 (https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/) 没有解释休眠搜索的单元测试。
现在我很好奇您如何测试您的休眠搜索实现。我需要一个测试实例吗?您是否重命名用于测试的索引并在每次测试前清除它 运行?
我很感激每一个输入!
我不会将这些称为“单元”测试,因为您还要测试与另一软件 (Elasticsearch) 的集成。你正在做的是,IMO,显然是集成测试。
在测试中启动 Elasticsearch 的最简单方法可能是使用 TestContainers:
- 以下是启动 Elasticsearch 容器的方法:https://www.testcontainers.org/modules/elasticsearch/
- 以下是在 JUnit 4 中的实现方法:https://www.testcontainers.org/test_framework_integration/junit_4/
如果你使用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 专业知识。