Как бы вы создали блог с использованием TDD-подхода?

Я рассматриваю возможность переделать свой блог (в настоящее время на PHP, но 100 строк кода без макета) в Ruby on Rails только для удовольствия. Я хочу сделать еще один проект в Rails, но я должен изучить Rails (больше, чем привет мир), прежде чем я попытаюсь создать полный проект.

Еще одна вещь, которую я хочу сделать, переделывая свой блог, - это по крайней мере выяснить, что такое TDD. Итак, как бы вы взяли подход Test Driven к созданию блога? Какие тесты вы бы написали? Как бы вы начали?

Каждый раз, когда я визуализую запись в блоге, ему нужно было бы миллион тестов для того, чтобы один компонент мог полностью протестировать его. Как мне избежать написания слишком большого количества тестов?

Кроме того, я делаю это сообщество wiki, потому что я намерен для этого в основном сделать мини-учебник/базу знаний...

Я пошел вперед и поставил щедрость на этот вопрос, так что, возможно, я действительно смогу получить хороший ответ на этот вопрос.

Ответ 1

TDD - это больше о дизайне, чем о тестировании. Многие пропустили это и в конечном итоге будут практиковать то, что не совсем похоже на TDD. С TDD вы пишете тест, чтобы изменить код. Вам не нужно беспокоиться о том, чтобы писать слишком много тестов, потому что у вас должен быть только тест для написания, если есть более производственный код для записи (и, следовательно, больше кода для тестирования). Опять же, TDD НЕ о том, чтобы просто написать много тестов для вашего кода, но вы получите множество тестов, и, следовательно, у вас будет очень мощный набор тестов, чтобы дать вам обратную связь по мере роста и изменения вашего кода.

Вместо того, чтобы говорить о том, как тестировать процесс разработки какой-либо определенной части программного обеспечения, я бы рекомендовал вам прочитать и узнать, как практиковать TDD и выяснить, как вы сказали, о чем все это. Одна хорошая книга для рассмотрения: Растущее объектно-ориентированное программное обеспечение, руководствуясь тестами. В книге используется Java, но это большое реальное приложение для использования TDD для создания довольно сложного программного обеспечения.

Там много для TDD, и я бы порекомендовал действительно копаться в нескольких хороших источниках, если вы хотите учиться и пытаться практиковать это, потому что в ответах на этот вопрос есть больше, чем может быть затронуто.

Ответ 2

Взгляните на заинтересованных сторон и на то, чего они хотят достичь. Важно начать там, потому что это позволяет вам правильно расставить приоритеты (т.е. Не в самой интересной технической части, а со своей самой большой коммерческой стоимостью). Разработчик является заинтересованной стороной, и снижение его опасений (из-за невозможности построить что-то) является действительной целью.

Мысль о дизайне записывается в тестах. Начните с конечных целей заинтересованных сторон, работайте оттуда назад до начала (Time-inversion). Это гарантирует, что вы сосредоточитесь на чем и меньше на том, как. Взаимодействие между объектами более важно, чтобы получить права, чем атрибуты объекта.

Смотрите:

Ответ 3

У меня есть аналогичное мнение Питу, его больше о дизайне.

Прыжки на нее, прежде чем смотреть на информацию о качестве, скорее всего, не дадут вам результатов. Скорее всего, вы просто подумаете: эти тесты испытывают боль. Это осознание того, что есть проблемы с дизайном, но он не скажет вам, как улучшить его.

Вы сказали "в настоящее время на PHP, но 100 строк кода без макета", если в этом случае есть, вероятно, несколько функций. Если вы сосредоточены на фактических необходимых функциях, также должно быть несколько тестов/выше, чем количество функций, но, пока те являются правильными модульными тестами, номер не должен взорваться - проверить это видео.

Ответ 4

Начните с написания функций Cucumber, чтобы обеспечить "внешний доступ". Они должны иметь возможность самостоятельно тестировать большую часть ваших функций. Очень легко писать. В блоге не так много тестов, после всего, что это просто сообщения и комментарии, не так ли? Посмотрите на мое приложение blorgh, которое представляет собой приложение Rails, разработанное с использованием Cucumber.

Ответ 5

Интересно, это именно то, что я начал пару дней назад. Я использую RSpec и Cucumber. Я начал писать пару спецификаций для моделей Article и Comment. Когда все стали зелеными, я написал тесты Cucumber для реализации представлений, контроллеров и т.д.

Это работает очень хорошо для меня, но я думаю, что начиная с Cucumber тоже хорошо, так как многим, похоже, нравится этот подход.

Если у вас мало знаний RSpec и Cucumber, я настоятельно рекомендую Railscasts:

Мне также понравились Peepcode screencasts, но в отличие от railscasts они стоят 9 $каждый.