在测试用例之后插入回滚种子数据

时间:2018-02-04 18:37:14

标签: java hibernate jpa kotlin

我正在使用Kotlin和Ktor开发JPA应用程序,并使用Hibernate作为ORM。

我的测试数据库是h2,hibernate.hbm2ddl.auto设置为create,以便在SessionFactory关闭后清除所有数据。

但是现在要拥有一个干净的数据库状态,我需要在每个TestCase之后重新创建EntityManagerFactory,这使得测试非常慢,因此我正在寻找一种不同的方法来实现这一点。

我已阅读有关Transactional Annotation的内容,但显然只能在Spring Framework中使用。

有没有人知道如何在测试用例运行后回滚来自before方法的插入?

以下是一个例子:

<%= posts.content.truncate_words(18) %>

1 个答案:

答案 0 :(得分:1)

您可以使用before和after方法创建一个基本测试类,该方法控制每个测试方法的事务:

public abstract class BaseTestWithEntityManager {

    protected static EntityManagerFactory emf;
    protected static EntityManager em;
    protected EntityTransaction transaction;

    @Before
    public void beforeSuper() {
        transaction = em.getTransaction();
        transaction.begin();
    }

    @After
    public void afterSuper() {
        em.flush();
        if (transaction.isActive()) {
            transaction.rollback();
        }
    }

    @BeforeClass
    public static void beforeClass() {
        emf = Persistence.createEntityManagerFactory("store");
        em = emf.createEntityManager();
    }

    @AfterClass
    public static void afterClass() {
        if (em.isOpen()) {
            em.close();
        }
        if (emf.isOpen()) {
            emf.close();
        }
    }
}