Тестирование репозитория EJB с помощью OpenEJB - как откатить изменения - PullRequest
3 голосов
/ 05 апреля 2011

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

1 Ответ

5 голосов
/ 06 апреля 2011

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

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

...