使用Maven运行测试时在多个线程中创建的ApplicationContext

时间:2012-10-12 12:47:53

标签: spring hibernate maven junit liquibase

我有两个persistence-unit,除了其他用途之外是相同的Hibernate的hbm2ddl create-drop,另一个使用validate,数据库由liquiBase创建。

现在从eclipse运行任何测试(HSQLDB命名为in-mem db),它们工作正常。但是从maven中运行所有这些,他们会因为异常的外键违规行为而制造。

我认为奇怪的是,我从4个不同的线程获取消息,例如关闭其中一个持久性单元时,表丢弃仍然写入控制台。

为什么我得到四个线程,都有自己的ApplicationContexts?我没有为{sure}设置parallel个参数,我也没有为maven使用-T开关。

编辑:

这是来自Maven命令行输出的片段

Hibernate: drop table PostalCodeDistribution if exists
Hibernate: drop table PublicationAudit if exists
15:21:13.672 [Thread-2] INFO  org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'TestPU-nocreate'
Hibernate: drop table PostalCodeDistributionAudit if exists
Hibernate: drop table PublicationInvoicing if exists
Hibernate: drop table PostalCodeSubscriberCountAudit if exists
15:21:13.672 [Thread-2] INFO  org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000030: Cleaning up connection pool [jdbc:hsqldb:mem:ptptest]
Hibernate: drop table Revision if exists
Hibernate: drop table PriceDate if exists

1 个答案:

答案 0 :(得分:-1)

您可能知道,默认情况下,SureFire会在不同的线程(“fork”)中执行您的测试。请参阅:Does Maven surefire plugin run tests using multiple threads?

您的测试或测试使用的某些库可能是异步执行的。您应该检查您的测试以验证是否是这种情况。