Я хорошо разбираюсь в модульном тестировании, DI, mocks и всем принципам дизайна, которые необходимы для того, чтобы как можно ближе к полному охвату кода, по возможности по-человечески (руководитель единой ответственности, подумайте, "как я буду тестировать это", как я код, и т.д.).
Мое последнее приложение, я не кодировал выполнение истинного TDD. Я продолжал модульное тестирование в виду, когда я закодировал, и написал свои тесты после написания кода, рефакторинга и т.д. Я делал TDD, когда это было "легко"... однако у меня не было так хорошо, как понять Теперь я... Это был первый проект, в котором я полностью использовал ДИ, насмешливые рамки и т.д., И первый, у которого был полный охват кода, - и я многому научился у него, когда я шел. Я испытываю желание назначить свой следующий проект, чтобы я мог полностью его кодировать TDD с нуля.
Я знаю, что это широкий вопрос, и я уже заказал TDD на примере и XP Unleashed, но я надеюсь получить краткий обзор того, как вы все проектируете/пишете большое приложение, делающее TDD.
Вы пишете все приложение, используя ничего, кроме прочеркнутого кода? (например, записывайте все сигнатуры функций, интерфейсы, структуры и пишите все приложение, но без написания какой-либо реальной реализации)? Я мог бы представить, что он работает с небольшими размерами, но разве это возможно при больших приложениях?
Если нет, то как вы могли бы написать свой первый unit test для функции самого высокого уровня в вашей системе? Скажем, например, - в веб-службе, где у вас есть функция под названием DoSomethingComplicated (param1,..., param6), открытая миру. Очевидно, что сначала написать тест для простой функции, такой как AddNumbers(), тривиально, но когда функция находится в верхней части стека вызовов, например this?
Вы все еще разрабатываете дизайн? Очевидно, что вы все еще хотите сделать "архитектуру" - например, блок-схему, показывающую, что IE разговаривает с IIS, который разговаривает с службой Windows через WCF, которая разговаривает с SQL-базой данных... ERD, которая показывает все ваши SQL-таблицы и их поля, и т.д., но как насчет дизайна класса? Взаимодействие между классами и т.д.? Вы разрабатываете этот фронт или просто продолжаете писать код заглушки, рефакторинг взаимодействия, когда вы идете вперед, пока все это не свяжется и похоже, что оно будет работать?
Любые советы очень ценятся