我有一个抽象类,我在为基于Spring的应用程序的注释配置创建测试时会扩展它。我正在使用嵌入式H2数据库,因此我的spring.jpa.hibernate.ddl.auto = create-drop。在下面的类中,您可以看到我在以下类的@Before方法中从EntityManagerFactory创建了一个entityManager。这意味着每个测试方法之间都会发生创建 - 丢弃过程。我假设这是一个耗时的过程,因此希望在应用程序中执行测试之前只发生一次。我试图通过将逻辑移动到配置类来实现这一目的,但我使用该方法得到了各种错误。
有人可以概述一下如何实现这个目标吗?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = App.class)
@WebIntegrationTest
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
public abstract class AbstractDBUnitTest {
@PersistenceUnit
protected EntityManagerFactory entityManagerFactory;
protected EntityManager entityManager;
@Before
public void setUp() throws Exception {
//Set up datasource, connection etc..
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
}
@After
public void tearDown() throws Exception {
//Clean up records
EntityTransaction transaction = entityManager.getTransaction();
if (transaction != null && transaction.isActive()) {
if (transaction.getRollbackOnly() == true) {
transaction.rollback();
} else {
transaction.commit();
}
}
}
}
我可以确认hbm2ddl进程是为每个测试类创建和删除一次表,因为我在应用程序中执行的每个TestCase类都看到了一次这个输出:
org.hibernate.tool.hbm2ddl.SchemaExport : HHH000227: Running hbm2ddl schema export
org.hibernate.tool.hbm2ddl.SchemaExport : HHH000230: Schema export complete