Тестирование репозитория EJB с помощью OpenEJB — как откатить изменения

Я пытаюсь протестировать свои репозитории на основе 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
    }
}

person omnomnom    schedule 04.04.2011    source источник


Ответы (1)


В zip-архиве примеров для версии 3.1.4 есть пример под названием «откат транзакции».

Проверьте это, так как у него есть несколько способов отката в модульном тесте. Один из методов включает прием для получения новой базы данных в памяти для каждого теста.

person David Blevins    schedule 05.04.2011