Я, возможно, даю вам опыт нашего опыта, когда мы начали рассматривать блок, тестирующий наш процесс среднего уровня, включающий в себя тонну операций «бизнес-логики» sql.
Сначала мы создали слой абстракции, который позволил нам «подключить» любое разумное соединение с базой данных (в нашем случае мы просто поддерживали одно соединение типа ODBC).
После того, как это было на месте, мы тогда были в состоянии сделать что-то подобное в нашем коде (мы работаем в C++, но я уверен, что вы получите идею):.
GetDatabase() ExecuteSQL (" INSERT INTO foo (blah, blah) ")
В обычном режиме работы GetDatabase() возвращает объект, который передал все наши sql (включая запросы), через ODBC напрямую в базу данных.
Затем мы начали изучать базы данных в памяти - лучший путь длинным образом кажется SQLite. (http://www.sqlite.org/index.html). Это очень просто настроить и использовать, и позволило нам подкласс и переопределить GetDatabase() для пересылки sql в базу данных в памяти, которая была создана и уничтожена для каждого проведенного теста.
Мы все еще находимся на ранней стадии, но пока это хорошо, но мы должны убедиться, что мы создаем любые таблицы, которые требуются, и заполняют их тестовыми данными - однако мы сократили рабочую нагрузку несколько здесь, создавая общий набор вспомогательных функций, которые могут многое сделать для нас.
В целом, это очень помогло нашему процессу TDD, поскольку создание каких-либо совершенно безобидных изменений для исправления некоторых ошибок может иметь весьма странные последствия для других (трудно обнаруживаемых) областей вашей системы - из-за самой природы SQL/баз данных.
Очевидно, что наш опыт сосредоточен вокруг среды разработки на C++, однако я уверен, что вы, возможно, получите что-то подобное, работающее под PHP/Python.
Надеюсь, что это поможет.
Я всегда соглашался с этим, но на практике из-за крайних сроков и «хорошо, теперь добавьте еще одну особенность, к сегодняшнему 14:00» это одно из самых сложных достижений. Тем не менее, этот вопрос является главной целью рефакторинга, хотя мой босс когда-либо решает, что он не думал о 50 новых возникающих проблемах, требующих совершенно новой бизнес-логики и таблиц. – 2015-07-23 18:50:27
Если ваши объекты плотно связаны с вашим слоем данных, трудно выполнить надлежащее модульное тестирование. первая часть модульного теста - «единица». Все устройства должны быть протестированы изолированно. хорошее объяснение – 2015-08-09 09:33:26