Тестирование приложений, взаимодействующих с базой данных, имеет свои особенности. Накопленный девелоперами и тестировщиками опыт можно сформулировать в виде
database unit testing best practices.
*
Каждому разработчику по базе данных. При написании тестов очень важно, чтобы состояние схемы базы данных и самих данных не менялось во время написания теста. Поэтому в проектах с несколькими разработчиками каждый разработчик должен работать в персональной базе данных.
*
Тесты должны быть независимы от результатов других тестов. Проще всего достичь этого, возвращая базу данных перед каждым тестом в начальное состояние. Этого можно добиться, очищая содержимое базы данных или просто не сохраняя результаты тестов в базе данных (
rollback после каждого теста).
*
Функция очистки всей базы данных. Часто необходимо или неизбежно сохранение промежуточных данных и результатов тестов в базе данных (например из-за
DDL autocommit в
Oracle). Необходимо разработать процедуру возвращения базы данных в инициальное состояние (как вариант, можно загружать
dump базы данных или написать программу, очищающую содержимое всех таблиц в схеме).
*
Маленькие входные данных. Для большинства тестов нет необходимости в полноценном содержимом базы данных. Вместо этого надо стараться создавать небольшие входные данные, специфичные для каждого теста; это облегчит анализ ошибок и сократит время разработки.
*
Общие данные. Многие тесты базируются на подобных данных. Чтобы ускорить процесс разработки тестов, можно создать наборы примитивных данных, которые могут быть использованы различными тестами. Кроме того, можно сохранять эти данные в базе перед выполнением группы подобных тестов, чтобы ускорить тестирование системы.
В мире Java удобным инструментом, позволяющим упростить реализацию и применение перечисленных принципов, является
DbUnit (
http://www.dbunit.org) -
java framework для тестирования баз данных. Фактически, это расширение
JUnit с возможностями дополнения и интеграции с другими инструментами разработки (
Maven,
Spring,
Eclipse,
Ant).
DbUnit позволяет описать желаемое или ожидаемое состояние базы данных в виде обыкновенных текстовых файлов, а затем легко и просто выполнить инициализацию этой БД перед запуском каждого теста или проверить её актуальное состояние после выполнения теста.