加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JUnit生命周期

发布时间:2020-12-14 19:19:41 所属栏目:Java 来源:网络整理
导读:我有一个生命周期问题,用JUnit做一些测试套件. 为了编写方便的JPA 2.0单元测试 作为Java开发人员 我想要: 在所有测试套件之前初始化一次EntityManagerFactory实例.我通过使用@BeforeClass注释来实现该对象 实例化一个EntityManager实例并在每个测试用例之前

我有一个生命周期问题,用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();
    }

}

派生测试套件:

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

由于JUnit生命周期注释的未指定顺序,NullPointerException在派生类的setUp()方法中占有一席之地.这对我来说很清楚.

是否有可能在没有手动注入任何派生测试套件类的每个setUp()/ tearDown()方法中的启动/回滚事务代码的情况下获得目标?
或者,是否有一个替代JUnit意味着或测试框架可以提供一种简单的方式来表达我的需求?

提前致谢.

最佳答案
您如何使用Google Guice将实体管理器和事务注入测试方法?

import com.google.inject.persist.Transactional;
import javax.persistence.EntityManager; 

public class MyTest {
        @Inject EntityManager em; 

        @Test
        @Transactional 
        public void createNewPerson() {
                em.persist(new Person(...)); 
        } 
}

它可以简化这方面的大量工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读