我尝试使用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
}
}
答案 0 :(得分:5)
在3.1.4的示例zip中有一个名为'transaction-rollback'的例子。
检查一下,因为它有多种方法可以在单元测试中回滚。其中一种技术包括为每次测试获取新内存数据库的技巧。