我正在使用Kotlin和Ktor开发JPA应用程序,并使用Hibernate作为ORM。
我的测试数据库是h2,hibernate.hbm2ddl.auto设置为create,以便在SessionFactory关闭后清除所有数据。
但是现在要拥有一个干净的数据库状态,我需要在每个TestCase之后重新创建EntityManagerFactory,这使得测试非常慢,因此我正在寻找一种不同的方法来实现这一点。
我已阅读有关Transactional Annotation的内容,但显然只能在Spring Framework中使用。
有没有人知道如何在测试用例运行后回滚来自before方法的插入?
以下是一个例子:
<%= posts.content.truncate_words(18) %>
答案 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();
}
}
}