Подтвердить что ты не робот

Лучший способ добавить тесты в существующий проект Rails?

У меня есть проект Rails, который я забыл строить тесты для (для стыда!), а база кода стала довольно большой. Один мой друг сказал, что RSpec было больно использовать, если вы не используете его с самого начала. Это правда? Что заставило бы его сказать это?

Итак, учитывая доступные комплекты тестов и тот факт, что база кода уже существует, каков был бы мой лучший курс действий для проверки этой вещи? Действительно ли это так сильно отличается от того, что он делает с самого начала?

4b9b3361

Ответ 1

Этот вопрос появился недавно в списке рассылки RSpec, и совет, который мы обычно давали, был:

  • Не утруждайте себя попытками ретро-соответствия спецификаций существующему, работающему, коду, если вы не собираетесь его изменять - он изнуряет и, если код не нуждается в изменении, довольно бессмыслен.
  • Начните писать спецификации для любых изменений, которые вы делаете с этого момента. Исправления ошибок являются особенно хорошей возможностью для этого.
  • Попытайтесь тренироваться в дисциплине, прежде чем прикасаться к коду, прежде всего напишите неудачный пример (= spec), чтобы выгнать изменение.

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

Я также рекомендую использовать встроенную спецификацию spec: rcov rake для генерации статистики покрытия кода. Очень полезно наблюдать за этими цифрами, когда вы начинаете тестировать свою кодовую базу.

Ответ 2

Возможно, начните с моделей? Их следует проверять изолированно, что должно сделать их самыми низкими плодами.

Затем выберите модель и начните писать тесты, которые говорят, что они делают. Когда вы идете вперед, подумайте о других способах проверки кода - есть ли крайние случаи, которые, возможно, вы не уверены? Напишите тесты и посмотрите, как ведет себя модель. По мере разработки тестов вы можете видеть области кода, которые не так чисты и не дублируются (DRY), как они могут быть. Теперь у вас есть тесты, вы можете реорганизовать код, поскольку вы знаете, что не влияете на поведение. Старайтесь не начинать улучшать дизайн до тех пор, пока у вас не будет тестов - таким образом, это безумие.

Как только у вас установлены модели, двигайтесь вверх.

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

Ответ 3

Принятый ответ - хороший совет, хотя в некоторых случаях он не является практичным. Я недавно столкнулся с этой проблемой на нескольких моих приложениях, потому что мне НУЖНО тесты для существующего кода. Другого пути вокруг не было.

Я начал выполнять все модульные тесты, а затем перешел на функционалы.

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

Используйте rcov для измерения вашего прогресса.

Удачи!

Ответ 4

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

Еще один совет - написать тест, когда вы столкнетесь с ошибкой, чтобы он никогда не возвращался, это называется регрессивным тестированием.

Ответ 5

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

Что означают люди, когда говорят, что добавить тесты/спецификации к exisitng-коду сложно, так это то, что сложный тест очень часто связан, что затрудняет запись тестов на уровне низкого уровня.

Одна из идей заключалась бы в том, чтобы начать с тестов полного стека, используя что-то вроде бегуна истории RSpec. Затем вы можете работать от "снаружи", изолируя то, что вы можете использовать в тестах на уровне низкого уровня, и постепенно распутывайте более сложный код по частям.

Ответ 6

Вы можете начать писать "тесты характеристик". С этим вы могли бы попробовать попробовать претенциозный драгоценный камень здесь:

Тем не менее, работа продолжается.