Можно ли выполнить откат базы данных после каждого теста JUnit без использования Spring Framework? - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь протестировать сервис, который обновляет несколько таблиц из базы данных, и я хочу откатывать базу данных до предыдущего состояния после каждого теста. Все решения, которые я нашел, используют @Transactional и @Rollback из среды Spring, но поскольку мое приложение не является веб-приложением Spring, я хотел бы использовать javax @Transactional, который у меня не работает.

это возможно с javax вообще или с чем-нибудь еще, кроме Spring?

Ответы [ 2 ]

1 голос
/ 10 января 2020

Откат транзакции не является хорошей идеей для тестирования (интеграционного теста), поскольку ограничение не может быть проверено перед фиксацией.

Вы должны:

  1. иметь БД * только для интеграционных тестов (или встроенной базы данных или контейнера базы данных или в базе данных RAM)
  2. выполняется, например, в правиле класса или в правиле теста , сценарий SQL, чтобы привести БД в известный статус
  3. выполнить тест
  4. , если тест изменяет БД, затем запустить усечение измененных таблиц (снова или в вашем классе или в правиле тестирования ) и перед выполнением нового теста снова запустите скрипт в точке 2
  5. , запускайте интеграционные тесты не так часто, как модульные тесты
0 голосов
/ 10 января 2020

Лучше использовать базу данных в памяти: H2 https://www.h2database.com/ Рекомендация для Java в базе данных памяти

Не всегда и не все в базу данных можно откатить до исходного состояния (например, последовательности).

...