Java Spring集成测试注入PersistenceContext
我正在SpringMVC应用程序中集成Hibernate搜索 因此,我们有一个“BuildSearchIndex”类,在应用程序开始时调用该类来创建搜索索引:Java Spring集成测试注入PersistenceContext,java,spring,hibernate,spring-mvc,dependency-injection,Java,Spring,Hibernate,Spring Mvc,Dependency Injection,我正在SpringMVC应用程序中集成Hibernate搜索 因此,我们有一个“BuildSearchIndex”类,在应用程序开始时调用该类来创建搜索索引: @Component public class BuildSearchIndex implements ApplicationListener { @PersistenceContext(unitName = "entityManagerFactory") private EntityManager _entityMan
@Component
public class BuildSearchIndex implements ApplicationListener {
@PersistenceContext(unitName = "entityManagerFactory")
private EntityManager _entityManager;
@Override
public void onApplicationEvent(ApplicationEvent event) {
try {
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(_entityManager);
fullTextEntityManager.createIndexer().startAndWait();
} catch (InterruptedException e) {
System.out.println("An error occurred trying to build the search index: " + e.toString());
}
return;
}
}
在正常的应用程序运行中,一切正常
但是当我尝试开始集成测试时,我总是得到一个非法的argumentException,即EntityManager为null
IntegrationTest的类定义如下所示:
@ActiveProfiles("test")
@WebAppConfiguration
@TransactionConfiguration(defaultRollback = false)
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class DummyServiceIntTest extends AbstractTransactionalJUnit4SpringContextTests {
}
如何在此集成测试中正确地注入实体管理器?根据信息,最有可能怀疑的是“测试”概要文件。它与默认配置文件有何不同?它只是有另一个数据库身份验证,并禁用了LDAP连接,但我不认为这是原因,因为自从我添加了BuildSearchIndex类以来,所有集成测试都失败了,不仅是来自这个TestClass的测试,而且所有的测试……如果无法加载上下文,它们都会失败,所以这并不奇怪。您是否配置了自己的
EntityManagerFactory
?当使用一个不需要的注释时,还可以尝试从注释中删除unitName
,它应该指向单元的名称,现在它似乎指向bean的名称。