Тестирование с использованием базы данных?
От: MozgC США http://nightcoder.livejournal.com
Дата: 12.01.10 22:12
Оценка:
Здравствуйте,
Поделитесь пожалуйста наиболее эффективным подходом к тестированию, когда тесты используют базу данных. Т.е. либо юнит-тесты выполнения хранимой процедуры/функции (выполнили ХП, проверили что она вернула или изменила в базе), либо интеграционные/функциональные (я в терминологии не силен) тесты включающие работу с БД.
Например 2 последних реальных примера:
1) Нетривиальная ХП на страничку sql-кода. Нужно ее вызвать и проверить что она правильно изменила БД.
2) Функция генерации прайс-листов. Нужно ее вызвать а потом открыть сгенерированный эксель файл и проверить что там верные данные. (это я так понимаю интеграционный тест? или функциональный?).

Основных варианта я вижу два:
1) Использование копии реальной базы данных (копии, а не просто схемы без данных, потому что в копии реальной БД зачастую уже есть данные которые можно для теста использовать), в коде теста добавлять в базу нужные для теста данные. И вот это есть геморрой. Иногда подготовка данных занимает 1-2 страницы кода. И это лишь для 1 теста. (Честно говоря иногда даже тест писать не охото, потому что понимаю что займет не очень мало времени, либо этого времени просто нет, т.е. есть более приоритетные задачи).
2) Поддержка специальной БД для тестов. Её можно хорошо подготовить 1 раз, так что она будет подходить для многих тестов. А если для какого-то теста нужно будет добавить еще данных, то это можно сделать в любимом SQL-редакторе, что может быть быстрее чем писать страницу или две кода, подготавливающего БД для теста. Минус тут в том что надо синхронизировать структуру этой базы данных с реальной базой данных. Т.е. если мы в реальной БД добавили колонку, то и в тестовой надо будет тоже добавить не забыть.

Еще можно стараться тесты сделать так, чтобы они не зависели от конкретных данных в БД (иногда это удается, особенно если использовать копию реальной БД, но далеко не всегда), тогда можно избежать фазы подготовки БД к тесту.

Может быть я вообще не то говорю и все может быть проще и правильнее? Что скажете? Если есть ХОРОШИЕ ссылки конкретно по моему вопросу — будет полезно.
Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.