RSpec против Shoulda?

Я новичок в модульной тестовой сцене; Я использую модульные тесты уже около 2 месяцев. Когда я unit test в Ruby, я в настоящее время следую стилю TDD и использую Test:: Unit:: TestCase. Я также прочитал о RSpec и о том, как это следует методологии BDD. Я также прочитал о Shoulda, который находится между двумя структурами. Мой вопрос в том, в какой структуре я должен посвятить свое время RSpec или Shoulda, или я должен придерживаться Test:: Unit:: TestCase? Любые мнения по этому вопросу оцениваются.

Ответы

Ответ 1

RSpec имеет много приятных функций, больше, чем просто синтаксис. Я бы порекомендовал его по поводу Shoulda.

Даже Thoughtbot, авторы Shoulda, теперь используют RSpec. Теперь Shoulda работает как плагин RSpec и предоставляет ряд полезных сокетов.

Ответ 2

Посвящение Testa:: Unit и RSpec, поэтому я не думаю, что это случай выбора Shoulda over RSpec или наоборот. Я использую Shoulda для нескольких проектов, некоторые тестируются с помощью Test:: Unit, другие с RSpec, и он отлично работает вместе с обеими структурами.

Я бы порекомендовал попробовать Shoulda в существующем проекте Test:: Unit. Это может сэкономить вам много мазков и сохранить ваши тестовые классы немного более аккуратными и более последовательными.

Как справедливо говорит Эндрю Вит, команда Shoulda выступает за способ RSpec делать все больше и больше (см. http://robots.thoughtbot.com/post/701863189/shoulda-rails3-and-beyond). Стоит попробовать RSpec и посмотреть, как вам это нравится. Это не каждому вкусу, но я предпочитаю его тестировать:: Unit для его синтаксиса, выразительности, вложенных контекстов, пользовательских совпадений и просто круговой прохлады!; -)

Ответ 3

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

Shoulda - отличный инструмент для однострочного тестирования. Это поможет вам сохранить ваши тесты чистыми и лаконичными. Если вам нравится этот стиль, я также рекомендую драгоценный камень Zebra. Это хороший инструмент для написания тестов с одним слоем.