У меня есть хорошее понимание модульного тестирования, DI, издевки, и все основные принципы дизайна, необходимые для обеспечения максимально полного охвата кода, по возможности по-человечески (принцип единой ответственности, думаю, «как я буду это проверять», и т.д...).дизайн приложения среднего размера при выполнении TDD?
Мое последнее приложение, я не кодировал выполнение истинного TDD. Я продолжал модульное тестирование в виду, когда я закодировал, и написал свои тесты после написания кода, рефакторинга и т. Д. Я делал TDD, когда это было «легко» ... однако у меня не было так хорошо, как понять Теперь я ... Это был первый проект, в котором я полностью использовал ДИ, насмешливые рамки и т. Д., И первый, у которого был полный охват кода, - и я многому научился у него, когда я шел. Я испытываю зуд, чтобы назначить свой следующий проект, чтобы я мог полностью его кодировать TDD с нуля.
Я знаю, что это широкий вопрос, и я уже заказал TDD на примере и XP Unleashed, но я надеюсь на краткий обзор того, как вы все проектируете/пишете большое приложение, делающее TDD.
Вы пишете все приложение, используя только прошитый код? (например, записывать все сигнатуры функций, интерфейсы, структуры и писать все приложение, но без написания какой-либо реальной реализации)? Я мог бы представить, что он работает на небольших средних размерах, но разве это возможно при больших приложениях?
Если нет, то как вы могли бы написать свой первый модульный тест для функции самого высокого уровня в вашей системе? Скажем, например, - в веб-службе, где у вас есть функция под названием DoSomethingComplicated (param1, ..., param6), открытая миру. Очевидно, что сначала написать тест для простой функции, такой как AddNumbers(), тривиально, но когда функция находится в верхней части стека вызовов, например, это?
Вы все еще занимаетесь дизайном? Очевидно, что вы все еще хотите сделать «архитектуру» - например, блок-схему, показывающую, что IE разговаривает с IIS, который разговаривает с службой Windows через WCF, которая разговаривает с SQL-базой данных ... ERD, которая показывает все ваши SQL-таблицы и их поля, и т. д., но как насчет дизайна класса? Взаимодействие между классами и т. Д.? Вы разрабатываете этот фронт или просто продолжаете писать код заглушки, рефакторинг взаимодействия, когда вы идете вперед, пока все это не свяжется и похоже, что оно будет работать?
Любой совет высоко ценится
Спасибо за отличный и подробный ответ. Это звучит очень похоже на то, как я закодировал свое последнее приложение .. (за исключением того, что я «обманывал» при написании тестов сначала в большинстве мест). Возможно, переход от модульного тестирования к TDD действительно не меняет способ проектирования и архивирования, поскольку я подумал ... Поэтому я должен спросить - вы очень строги с выполнением тестов в первую очередь? Когда-либо находишь это просто, просто написать код перед тестом? Если да, то как часто это происходит? И в каких-либо конкретных шаблонах/ситуациях? – dferraro
Я очень строг, когда дело доходит до теста - сначала, так как я нахожу, что * Красная * фаза Red/Green/Refactor очень важна - я часто писал тест, который сразу же стал зеленым, несмотря на противоположное намерение. Это означает, что тест не проверяет, что я думал, что он тестирует, поэтому его нужно переписать. Это происходит со мной ок. один раз в день, но эта защита недоступна, когда вы пишете тесты после этого. Очень редко я пишу без тестирования, но когда это происходит, я удаляю код спайка, когда я закончил, а затем TDD верную реализацию, основанную на моем опыте по шипу. –