2008-09-21 3 views
33

Я настраиваю приложение для рельсов, и я только что закончил делать модульные тесты, и мой друг сказал, что, по-видимому, светильники уже не круты, а люди теперь используют RSpec или shoulda. Мне было интересно, каковы фактические преимущества использования этих других наборов инструментов. Любая информация вообще оценивается.Почему я должен использовать RSpec или shoulda с Rails?

-fREW

ответ

17

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

Существует много информации о BDD здесь: http://behaviour-driven.org/ И википедия: http://en.wikipedia.org/wiki/Behavior_Driven_Development

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

4

RSpec путь более мощный, потому что это гораздо легче читать и писать тесты. Это также очень элегантное при использовании издевается и окурков, концепции, которая будет чрезвычайно полезной, как только вы начнете использовать их в ваши тесты. Попробуйте это в простом тестовом приложении (NON RAILS!), И вы увидите, насколько элегантны ваши спецификации по сравнению с эквивалентным стандартным тестированием.

22

Я лично предпочитаю Shoulda для RSpec. Я нахожу, что у Shoulda меньше магического синтаксиса, чем RSpec. Моя проблема с RSpec заключается в том, что да, это очень читаемо, когда я читаю его вслух, но когда я доберусь до его написания, хм-м-м, я никогда не уверен, как должно быть записано данное утверждение. Prag Dave explains the problem better than me. Он также likes Shoulda и имеет несколько примеров.

+1

Я полностью согласен webmat. Я действительно борюсь с пониманием синтаксиса RSpec, потому что у него столько синтаксического сахара. Он превращает обычные фразы в код, но потом вы выясните, что он должен делать! Кривая крутая, и я ленив. – srboisvert 2008-09-21 20:50:00

7

Есть две разные вещи здесь:

Первое является то, что основа использовать для написания тестов/спецификации. Здесь вы можете выбирать между Test :: Unit, RSpec, Shoulda и т. Д. Выбор заключается в том, хотите ли вы делать традиционный TDD (Test :: Unit) или предпочитаете ли вы альтернативные способы мышления о специфическом поведении, защищенном разработчиками, например, David Chemlinsky (RSpec и в некоторой степени Shoulda).

Во-вторых, как обрабатывать тестовые данные. Есть инструменты Rails и альтернативы, сложенные с другими целями, такими как the FixtureReplacement plugin. Раньше у Rails 2.0 были значительные и хорошо документированные пробные проблемы. Многие из практических вопросов были исправлены в Rails 2.0. Однако светильники могут привести к непреднамеренной тестовой связи, и некоторые из альтернатив пытаются избежать этого.

2

Если вы создаете большое приложение и не имеете команду, которая действительно хороша в написании развязанного кода, который может быть хорошо протестирован с помощью тестов черного ящика и готов полностью использовать использование/отладки большого количества макетов & заглушки, не спускайтесь по Фабричной дороге.

Где бы вы ни читали о том, как удивительные заводы Вы увидите небольшое предостережение о том, как фабрики могут оказаться невозможными в большом приложении, потому что они немного медленнее, чем светильники.

Но «немного медленнее» на самом деле на несколько порядков меньше.

Заводы не намного проще кодировать, чем светильники, которые используют метки для идентификаторов, при условии, что вы держите светильники организованными. И в некоторых случаях фабрики труднее отлаживать.

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

Если вы используете minitest, вы можете запускать свои тесты в случайном порядке; это быстро выявит связь данных между тестами. (не уверен, что rspec имеет возможность рандомизировать заказ на испытания)

1

Тест :: Устройство подходит для небольших применений. Но есть много преимуществ для использования тестовых фреймворков, таких как Shoulda или RSpec, e. г. контексты !!

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

0

Вы можете использовать испытательную платформу, такую ​​как Cucumber, которая еще быстрее, чем RSpec.

Смежные вопросы