我有一个生命周期问题,用JUnit做一些测试套件.
为了编写方便的JPA 2.0单元测试
作为Java开发人员
我想要:
>在所有测试套件之前初始化一次EntityManagerFactory实例.我通过使用@BeforeClass注释来实现该对象
>实例化一个EntityManager实例并在每个测试用例之前启动一个新事务,并在建议之前/之后或周围回滚像AOP这样的已启动事务
>能够在任何派生测试套件之前/之后进行任何设置/拆卸操作
我一直在写JUnit测试.但在这种情况下,我对列表中的第二个和第三个项目有疑问.
请查看以下测试套件示例:
抽象测试套件:
public abstract class AbstractPersistenceTest { protected static EntityManagerFactory emf; protected EntityManager em; @BeforeClass public static void setUpClass() { emf = Persistence.createEntityManagerFactory("test"); } @Before public void setUp() { em = emf.createEntityManager(); em.getTransaction().begin(); } @After public void tearDown() { em.getTransaction().rollback(); em.close(); } @AfterClass public static void tearDownClass() { emf.close(); } }
@H_301_22@派生测试套件:
public class EmployeeJpqlTest extends AbstractPersistenceTest { private Employee john; private Employee jack; @Before public void setUp() { john = new Employee("John Doe",1000); jack = new Employee("Jack Line",1010); em.persist(john); em.persist(jack); } @Test public void itShouldRetrieveAllEmplloyees() { TypedQuery
@H_301_22@ 由于JUnit生命周期注释的未指定顺序,NullPointerException在派生类的setUp()方法中占有一席之地.这对我来说很清楚.
是否有可能在没有手动注入任何派生测试套件类的每个setUp()/ tearDown()方法中的启动/回滚事务代码的情况下获得目标?
或者,是否有一个替代JUnit意味着或测试框架可以提供一种简单的方式来表达我的需求?提前致谢.
最佳答案
您如何使用Google Guice将实体管理器和事务注入测试方法?
原文链接:https://www.f2er.com/java/438096.htmlimport com.google.inject.persist.Transactional; import javax.persistence.EntityManager; public class MyTest { @Inject EntityManager em; @Test @Transactional public void createNewPerson() { em.persist(new Person(...)); } }
@H_301_22@它可以简化这方面的大量工作.