如何管理Hibernate Search集成测试的测试数据

问题描述 投票:0回答:2

我有一个基于Spring的系统,它使用Hibernate Search 3.4(在Hibernate 3.5.4之上)。集成测试由Spring管理,使用@Transactional注释。目前,测试数据(要编制索引的实体)由Liquibase脚本加载,我们使用它的Spring集成。管理起来非常不方便。

我的新解决方案是将测试数据定义为Spring bean,并按名称将它们连接为Resources。这部分有效。

我尝试将这些bean持久化并在我的测试用例的setUp方法中(以及在测试方法本身中)进行索引但是我失败了。他们进入数据库很好但我无法将它们编入索引。我尝试在FullTextEntityManager上调用index()(使用flushToIndexes),我尝试了createIndexer().startAndWait()

我还可以做些什么?或者可能有更好的测试HS的选择?

先感谢您

hibernate-search
2个回答
2
投票

我的新解决方案是将测试数据定义为Spring bean,并按名称将它们连接为Resources。这部分有效。

听起来像单元测试的奇怪设置。说实话,我不会引用你的确如何做到这一点。

在搜索本身中,内存数据库(H2)与Lucene RAM目录一起使用。这种设置的好处是可以快速,轻松地避免测试之间的依赖关系。

我尝试将这些bean持久化并在我的测试用例的setUp方法中(以及在测试方法本身中)进行索引但是我失败了。他们进入数据库很好但我无法将它们编入索引。

如果启用了自动索引并且在事务中发生了测试数据的持久性,那么它应该可以工作。与Spring结合使用的一个常见错误是使用错误的事务管理器。 Hibernate Search论坛有很多线索,例如这个 - https://forum.hibernate.org/viewtopic.php?f=9&t=998155。由于您没有提供任何具体的配置和代码示例,因此很难提供更具体的建议。

我试过createIndexer()。startAndWait()

这也是一个很好的方法。如果你想插入不是这样的几个测试实体,而是插入一整套数据,我会推荐这种方法。在这种情况下,使用像dbunit这样的框架插入testdata然后手动索引数据是有意义的。 createIndexer()。startAndWait()是适合它的工具。将所有这些加载/持久/索引功能提取到一个公共测试基类中是可行的方法。基类也可以负责执行所有Spring引导。

同样,要提供更具体的反馈,您必须优化您的问题。


1
投票

我有一个完全不同的方法,当我编写任何查询时,我想编写一个完整的测试套件,但数据创建一直很痛苦(特别提到测试客户腐败和所有测试套件中断时)。

为了解决这个问题,我创建了Random-JPA。它简单易用。整个想法是您创建新数据和测试。

你可以找到full documentation here

© www.soinside.com 2019 - 2024. All rights reserved.