我有一个基于Spring的系统,它使用Hibernate Search 3.4(在Hibernate 3.5.4之上)。集成测试由Spring管理,带有@Transactional
注释。目前,测试数据(要编制索引的实体)由Liquibase脚本加载,我们使用它的Spring集成。管理起来非常不方便。
我的新解决方案是将测试数据定义为Spring bean,并按名称将它们连接为Resources。这部分有效。
我试图让这些bean在我的测试用例的setUp方法中持久化并编入索引(在测试方法本身中),但是我失败了。他们进入数据库很好但我无法将它们编入索引。我尝试在FullTextEntityManager上调用index()(使用flushToIndexes),我尝试了createIndexer().startAndWait()
。
我还能做什么? 或者可能有更好的测试HS的选择?
提前谢谢
答案 0 :(得分:2)
我的新解决方案是将测试数据定义为Spring bean和wire 它们作为资源,按名称。这部分有效。
听起来像单元测试的奇怪设置。说实话,我并不是说你如何做到这一点。
在搜索本身中,内存数据库(H2)与Lucene RAM目录一起使用。这种设置的好处是可以快速,轻松地避免测试之间的依赖关系。
我试图将这些bean保存并在setUp方法中编入索引 我的测试用例(以及测试方法本身)但我失败了。他们得到 进入DB很好但我无法将它们编入索引。
如果启用了自动索引并且在事务中发生了测试数据的持久性,那么它应该可以正常工作。与Spring结合使用的一个常见错误是使用错误的事务管理器。 Hibernate Search论坛有很多线索,例如这个 - https://forum.hibernate.org/viewtopic.php?f=9&t=998155。由于您没有提供任何具体的配置和代码示例,因此很难提供更具体的建议。
我尝试了createIndexer()。startAndWait()
这也是一个很好的方法。如果你想插入不是这样的几个测试实体,而是插入一整套数据,我会推荐这种方法。在这种情况下,使用像dbunit这样的框架插入testdata然后手动索引数据是有意义的。 createIndexer()。startAndWait()是正确的工具。将所有这些加载/持久/索引功能提取到一个公共测试基类中是可行的方法。基类也可以负责执行所有Spring引导。
同样,要提供更具体的反馈,您必须优化您的问题。
答案 1 :(得分:1)
我有一个完全不同的方法,当我编写任何查询时,我都想编写一个完整的测试套件,但是数据创建一直很痛苦(特别提到测试客户损坏并且所有测试套件都崩溃的时候。) >
为解决这个问题,我创建了Random-JPA。它很容易集成。整个想法是创建新数据并进行测试。