Не должны
проверки в рельсах просто работают? Это
больше похоже на тестирование фреймворка
чем тестирование вашего кода. Почему бы
вам нужно проверить валидации?
Проверки в Rails действительно работают - на самом деле, в базе кода Rails есть модульные тесты, чтобы убедиться в этом. Когда вы проверяете валидацию модели, вы тестируете специфику валидации: длину, принятые значения и т. Д. Вы убедитесь, что код написан так, как задумано. Некоторые проверки являются простыми помощниками, и вы можете не проверять их на том основании, что «никто не может испортить вызов validates_numericality_of
». Это правда? Каждый разработчик всегда помнит, чтобы написать это в первую очередь? Разве каждый разработчик случайно не удаляет строку из вставки плохой копии? По моему личному мнению, вам не нужно тестировать каждую последнюю комбинацию значений для помощника проверки Rails, но вам нужна строка, чтобы проверить, что она там с правильными значениями, переданными, на случай, если какой-нибудь панк изменит это в будущем без должного обдумывания.
Кроме того, другие проверки более сложны, требуют большого количества пользовательского кода - они могут потребовать более тщательного тестирования.
Кроме того, тесты кажутся супер
хрупкие к любым изменениям в вашем коде. Так
если вы что-то измените в своих моделях,
Вы должны изменить свои тесты и
светильники, чтобы соответствовать. Разве это не
нарушать принцип СУХОГО?
Я не верю, что это нарушает СУХОЙ. Они общаются (это то, что программирование, общение) две совершенно разные вещи. Тест говорит, что код должен что-то сделать. Код говорит, что он на самом деле делает. Тестирование чрезвычайно важно, когда между этими вещами есть разрыв.
Тестовый код и код приложения, очевидно, тесно связаны между собой. Я думаю о них как о двух сторонах монеты. Вы не хотели бы переднюю часть без задней части или заднюю часть без передней части. Хороший тестовый код усиливает хороший код приложения, и наоборот. Два вместе используются, чтобы понять всю проблему, которую вы пытаетесь решить. И хорошо написанный тестовый код является документацией - он показывает, как должен использоваться код приложения.
В-третьих, написание тестового кода, кажется, занимает
много времени. Это нормально? не было бы
это будет быстрее, чтобы обновить мой
браузер и посмотреть, сработало ли это? я
уже надо играть с моим
приложение просто посмотреть, если оно течет
правильно и убедитесь, что мой CSS не имеет
взорвалось. Почему бы не ручное тестирование
будет достаточно?
Вы работали только над очень маленькими проектами, для которых этого тестирования, возможно, достаточно. Однако, когда вы работаете над проектом с несколькими разработчиками, тысячами или десятками тысяч строк кода, точками интеграции с веб-сервисами, сторонними библиотеками, несколькими базами данных, месяцами разработки и изменениями требований и т. Д., Возникает много других факторы в игре. Ручного тестирования просто недостаточно. В проекте любой реальной сложности изменения в одном месте часто могут привести к непредвиденным результатам в других. Правильная архитектура помогает смягчить эту проблему, но также помогает автоматизированное тестирование (и помогает определить точки, в которых можно улучшить архитектуру), определяя, когда изменение в одном месте нарушает другое.
Моя проблема в том, что
затраты на написание тестов кажутся абсурдными
высокий по сравнению с преимуществами. Тот
сказал, что любой подробный ответ приветствуется
потому что я, вероятно, пропустил выгоду или
два.
Я перечислю еще несколько преимуществ.
Если вы сначала протестируете (Test Driven Development), ваш код, вероятно, будет лучше. Я не встречал программиста, который дал бы ему хороший шанс, для которого это было не так. Сначала тестирование заставляет вас задуматься о проблеме и, на самом деле, разработать ваше решение, а не взломать его. Более того, это заставляет вас достаточно хорошо разбираться в проблемной области, чтобы, если вам действительно пришлось ее взломать, вы знаете, что ваш код работает в соответствии с заданными вами ограничениями.
Если у вас есть полный охват тестированием, вы можете выполнить рефакторинг без риска. Если проблема с программным обеспечением очень сложна (опять же, проекты в реальном мире, которые длятся месяцами, как правило, сложны), то вы можете упростить ранее написанный код. Итак, вы можете написать новый код, чтобы заменить старый код, и если он пройдет все ваши тесты, все готово. Он делает именно то, что делал старый код в отношении тестов. Для проекта, который планирует использовать метод гибкой разработки, рефакторинг абсолютно необходим. Изменения всегда должны быть сделаны.
Подводя итог, можно сказать, что автоматизированное тестирование, особенно разработка, основанная на тестировании, - это в основном метод управления сложностью разработки программного обеспечения. Если ваш проект не очень сложный, стоимость может перевесить выгоды (хотя я сомневаюсь в этом). Однако проекты в реальном мире, как правило, очень сложны, и результаты тестирования и TDD говорят сами за себя: они работают.
(Если вам интересно, я считаю, что статья Дэна Норта, посвященная поведенческому развитию, очень полезна для понимания большой ценности тестирования: http://dannorth.net/introducing-bdd)