2011-11-09 77 views
0

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

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

我试图让这些bean在我的测试用例的setUp方法(以及测试方法本身)中持久化并建立索引,但是我失败了。他们进入数据库的罚款,但我不能让他们索引。我试图在FullTextEntityManager(与flushToIndexes)上调用index(),我试过createIndexer().startAndWait()

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

预先感谢您

回答

1

我的新的解决方案是有定义的Spring bean和电线 它们作为资源的测试数据,按名称。这部分工作。

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

In Search本身内存数据库(H2)与Lucene RAM目录一起使用。这种设置的好处是,避免测试之间的依赖性是快速而容易的。

我试图让这些bean在我的测试用例(和测试方法本身)中setUp方法 中持久化和索引,但是我失败了。他们得到 数据库罚款,但我不能让他们索引。

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

我试过createIndexer()。startAndWait()

,这也是一个不错的办法。如果你不想插入这样一对测试实体,而是一整套数据,我会推荐这种方法。在这种情况下,使用像dbunit这样的框架来插入测试数据然后手动索引数据是有意义的。 createIndexer()。startAndWait()是正确的工具。将所有这些加载/持久化/索引功能提取到一个通用的测试基类是一种可行的方法。基类也可以负责完成所有的Spring引导。

再次,要给出更具体的反馈,你必须改进你的问题。

+0

感谢您的回答。 –