Database Rider - простая работа с тестовыми данными
Если вы пишете интеграционные тесты для spring-boot приложений, то, скорее всего, сталкивались с проблемой инициализации данных перед тестом и их последующей очистки после окончания теста.
Существует множество способов подготовки и очистки данных, вот некоторые из них:
- Запуск sql-скрипта, написанного руками, в секциях @Before/@After.
- Использование скрипта import.sql в spring-boot для инициализации БД.
- Запуск отдельных миграций liquibase/flyway для тестовых данных.
Эти варианты достаточно простые для начальной реализации, но у них есть существенные недостатки при дальнейшем использовании:
- Избыточный код, который переносится из теста в тест.
- Сложность поддержки данных при изменении БД.
- Постоянно возникающие конфликты между тестами.
- Плохая читаемость тестовых данных.
Как упростить себе подготовку и очистку данных в интеграционных тестах? Использовать библиотеку Database Rider.
Database Rider - это библиотека, построенная на основе DBUnit, которая позволяет работать с тестовыми данными в простом и декларативном подходе. Вместо того, чтобы готовить SQL скрипты для наполнения таблиц, можно описывать необходимые для теста данные в простых и читаемых форматах - JSON, YAML, XML, CSV и XLS.
Ключевые преимущества, которые дает Database Rider:
- Декларативный и читаемый формат - данные описываются в удобном и читаемом формате - CSV/YAML/JSON/XSL.
- Автоматическая загрузка и очистка БД - с помощью одной аннотации - @DataSet можно указать, какие данные необходимо загрузить перед тестом. А после теста таблицы автоматически очистятся.
- Сравнение состояния БД после теста - после манипуляции с данными можем проверить состояние БД и сравнить с ожидаемым, используя аннотацию @ExpectedDataSet.
- Гибкость управления тестовыми данными - можно определять разные наборы данных для разных тестовых сценариев.
- Поддержка Spring и JUnit5 - в отличие от DBUnit, Database Rider отлично интегрируется с современным стеком Java-разработки.
Простой пример использования Database Rider для тестирования
Начать использовать Database Reaper в тестах очень просто, нужна лишь минимальная конфигурация.
Подключаем к скрипту сборки, в качестве примера используем gradle:
Тестовые данные опишем в формате YAML:
Теперь можно использовать аннотацию @DataSet для загрузки данных перед тестом:
Мы также можем проверить состояние БД после теста, используя аннотацию @ExpectedDataSet:
Файл с данными для проверки конечного состояния:
Итог
Database Rider делает рутинную работу по подготовке и очистке БД. Это простой инструмент, который сделает ваши тесты чище и нагляднее. Попробуйте использовать его совместно с testcontainers, это значительно упростит разработку и поддержку тестов.
Мой канал в telegram, не забудь подписаться.