Я пытаюсь протестировать свои репозитории на основе EJB, используя OpenEJB. Каждый раз, когда запускается новый модульный тест, я бы хотел, чтобы моя БД находилась в «начальном» состоянии. После теста все изменения должны быть отменены (независимо от того, прошел тест успешно или нет). Как это сделать простым способом? Я попытался использовать UserTransaction - начать его, когда тест начинается, и откатить изменения при завершении (как вы можете видеть ниже). Я не знаю почему, но с этим кодом все изменения в БД (которые были сделаны во время юнит-теста) остаются после того, как была выполнена откатка строк назад. Как я уже писал, я хотел бы сделать это максимально простым способом, без какой-либо внешней схемы БД и т.д.
Заранее спасибо за любые подсказки!
Петр
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
}
}