使用OpenEJB进行EJB存储库测试 - 如何回滚更改

时间:2011-04-04 21:15:00

标签: unit-testing transactions openejb

我尝试使用OpenEJB测试基于EJB的存储库。每次运行新单元测试时,我都希望我的数据库处于“初始”状态。测试完成后,应回滚所有更改(无论测试是否成功)。如何以简单的方式完成它?我尝试使用UserTransaction - 在测试开始时开始并在完成时回滚更改(如下所示)。我不知道为什么,但是使用这段代码,DB的所有更改(在单元测试期间完成)都会在执行换行后更改。 正如我所写,我想以最简单的方式完成它,没有任何外部数据库架构等等。

提前感谢任何提示!

Piotr

 public class MyRepositoryTest {

    private Context initialContext;

    private UserTransaction tx;

    private MyRepository repository; //class under the test

    @Before
    public void setUp() throws Exception {
        this.initialContext = OpenEjbContextFactory.getInitialContext();
        this.repository = (MyRepository) initialContext.lookup(
                "MyRepositoryLocal");
        TransactionManager tm = (TransactionManager) initialContext.lookup(
                "java:comp/TransactionManager");
        tx = new CoreUserTransaction(tm);
        tx.begin();
    }

    @After
    public void tearDown() throws Exception {
        tx.rollback();
        this.initialContext = null;
    }

    @Test
    public void test() throws Exception {            
        // do some test stuff
    }
}

1 个答案:

答案 0 :(得分:5)

在3.1.4的示例zip中有一个名为'transaction-rollback'的例子。

检查一下,因为它有多种方法可以在单元测试中回滚。其中一种技术包括为每次测试获取新内存数据库的技巧。