Запуск тестов JUnit для большего количества типов баз данных - PullRequest
3 голосов
/ 23 ноября 2011

У меня есть приложение, которое использует базы данных через JDBC API (на самом деле шаблон Spring JDBC). Мы хотим запустить наши модульные тесты для большего количества типов баз данных (MS SQL, Oracle, Postgre); Таким образом, чтобы запустить тест (например, с maven), который будет запускать модульные тесты 3 раза, для каждой указанной базы данных.

Как это изящно решить?

(я думал о собственной реализации JUnit runner, но у нас также есть тесты Спока)

Ответы [ 3 ]

5 голосов
/ 23 ноября 2011

Начните с DBUnit

DbUnit - это расширение JUnit (также может использоваться с Ant), предназначенное для проектов, управляемых базой данных, которое, помимо прочего, помещает вашу базу данных в известнуюсостояние между тестовыми прогонами.Это отличный способ избежать множества проблем, которые могут возникнуть, когда один тестовый случай повреждает базу данных и приводит к сбою или усугублению последующих тестов.

Используйте отдельный JdbcDatabaseTester для каждой базы данных -модульные тесты и т. д. должны быть закодированы в IDatabaseTester и могут работать со всеми базами данных.

4 голосов
/ 25 ноября 2011

Основной вопрос - как запустить один и тот же тест несколько раз с разными настройками БД.Вы можете реализовать это на уровне инфраструктуры тестирования (например, с помощью пользовательского бегуна JUnit или в виде расширения DBUnit / Unitils ) или на уровне инструмента сборки (если ваш инструмент сборки достаточно гибок).В обоих случаях должна быть возможность иметь одну реализацию, которая работает с JUnit и Spock.(Кстати, Spock предоставляет готовую интеграцию с Unitils).

2 голосов
/ 23 ноября 2011

Что именно вы тестируете? Ваш Java-код работает JDBC? Ваши заявления SQL против схемы базы данных? В зависимости от ответа, есть 2 стратегии:

Если вы тестируете java-код, просто смоделируйте JDBC-соединение с фреймворком по вашему выбору (я бы порекомендовал jMockit) и убедитесь, что ваш код работает правильно. SQL заявления

В случае, если это схема базы данных, вы можете подготовить операторы SQL и отправить их в БД по вашему выбору наиболее удобным способом (DBUnit также может быть использован для этой цели, или SoapUI, или другой инструмент управления БД)

Разделение этих двух задач обеспечит более простые и надежные тесты для каждого уровня.

PS: также рассмотрите возможность использования некоторой формы ORM - например, JPA

...