Это старый вопрос, но я думал, что добавлю определенный опыт, который у нас был с этим.
Другие плакаты технически правильны, что это форма тестирования интеграции, но из того места, где я сижу, в MySQL часто возникает слишком много логики, которая должна быть удалена при модульном тестировании. Если вы похожи на нас и имеете большие сложные службы, которые в значительной степени зависят от MySQL (а часто и нескольких таблиц на услугу), наличие надежной структуры тестирования, которая включает в себя проверку логики запросов, действительно удобна. Мы макетируем большое количество наших зависимостей в наших модульных тестах, но не в MySQL.
У нас есть набор классов, которые обертывают simpletest, чтобы обеспечить эту функциональность. Он работает примерно так:
- Инструкции по созданию каждой таблицы базы данных хранятся в файле по
tests/etc/schemas/table.sql
. Он содержит данные схемы, а также вставки для всех консервированных данных, которые, как ожидается, обнаружит тест.
- Каждый тест, требующий базы данных, расширяет класс
Test_DbCase
, который предоставляет функциональные возможности для создания таблиц.
- Класс bootstrap заботится о создании и удалении базы данных о конструкции и разрушении.
- Во время выполнения тест вызывает
loadTables('foo', 'bar')
в методе setUp для выполнения SQL-команд в foo.sql
и bar.sql
.
- Испытания проводятся против консервированных данных. Остальное очевидно.
Еще один инструмент, который у нас есть, - это скрипт bash, который упрощает создание файлов table.sql
. Это очень удобно, потому что в противном случае мы будем писать SQL вручную - вы можете взять существующий набор таблиц, настроить все свои данные в MySQL и затем экспортировать его для создания тестовых файлов в основном.
Это работает очень хорошо для нас, хотя нам все равно пришлось кататься по нему.
Можете ли вы уточнить, с каким препятствием вы столкнулись? Читая ваши вопросы и ответы, я не могу понять, что удерживает вас от написания кода? – Till 2008-10-09 23:27:44