Spring DBUnit:限制spring.jpa.hibernate.ddl执行

时间:2016-01-13 10:55:15

标签: spring jpa dbunit

我有一个抽象类,我在为基于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

0 个答案:

没有答案