3

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

提前感谢您的任何提示!

彼得

 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
    }
}
4

1 回答 1

5

在 3.1.4 的示例 zip 中有一个名为“事务回滚”的示例。

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

于 2011-04-05T20:23:50.870 回答