2009-09-19 3 views
21

Меня немного смущает огромное количество тестовых фреймворков, доступных для Ruby/ROR.Огурцы избавляются от необходимости писать модульные тесты?

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

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

Должен ли я создавать свои модульные тесты с использованием Rspec или Test: Unit? Когда я тестирую функциональность Ajax, я должен использовать Selenium или Watir?

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

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

Я ценю, что некоторые из них являются субъективными, но общие подходы к тому, как атаковать эту проблему, будут приветствоваться.

ответ

20

Используйте огурец на высоком уровне, чтобы описать, что пользователь должен уметь видеть и делать. Используйте RSpec, Test: Unit, Shoulda и т. Д. Для написания модульных тестов. Прямо из the horse's mouth:

Когда вы решите, что вы хотите добавить новую функцию или исправить ошибку, начать писать новую функцию или сценарий, который описывает, как функция должна работать. Не пишите никакого кода (пока).

...

Это когда вы начинаете писать код. Начните с написания нескольких строк кода, чтобы решить проблему, которую вы получили от Cucumber. Запустите огурец снова. Повторяйте и промойте, пока вы не удовлетворитесь своей особенностью. Когда вы переходите к подробным подробным сведениям, опустите один уровень абстракции и используйте RSpec или любую инфраструктуру тестирования Ruby, чтобы написать некоторые спецификации/тесты для ваших классов.

Огурец предназначен для проверки всего вашего стека вместе, в отличие от «единиц».

Вам нужно решить, где нарисовать линию, но многие под капотом, вероятно, не будут покрыты тестом на огурцы. Скажем при регистрации, я заполняю форму, с моим именем, адресом электронной почты, номером телефона и т. Д. В модульном тесте можно проверить, что новый User также создаст новый TelephoneNumber. С точки зрения пользователя, им все равно, что он создает новый TelephoneNumber, им все равно, что после регистрации они имеют учетную запись и могут видеть свой номер телефона.

У меня также нет много опыта написания тестов огурца (еще нет), но я надеюсь, что это немного поможет.

1

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

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

6

Когда единичный тест терпит неудачу (я имею в виду настоящий модульный тест, который тестирует метод изолированно с использованием mocks), он сообщает вам, что проблема с «узлом». Когда приемочный тест терпит неудачу, он сообщает вам, что «функция» имеет проблему, а не там, где проблема находится.

3

Когда вы создаете приложение для рельсов, по умолчанию вы получаете функциональные, интернатные и модульные тесты. Огурец является дополнительным тестом, это способ также проверить опыт, который ваш пользователь будет иметь. Когда они нажимают кнопку с надписью «go», они должны видеть «успех», а не 404. Это будет гарантировать, что ничто из вас случайно не испортит пользовательский интерфейс, а сверху вниз ваше приложение работает для наиболее распространенных которые вы можете придумать. Другие тесты предназначены для обеспечения того, чтобы ничто не пошло не так, и что вы проверили модель и метод с помощью микроскопа. Возможно, можно полностью повторить единичные тесты с огурцом, но было бы больно (и сумасшествие было бы медленным, особенно если вы используете селен). Лучшее время для написания тестов - это когда вы разрабатываете код, а самый быстрый и простой способ сделать это - это использовать встроенное тестирование рельсов и, возможно, некоторую дополнительную помощь, такую ​​как shoulda, rspec, также я огромный поклонник фабрики-девушки. Если вы еще не проверили это, у www.railscasts.com есть отличное вступление к огурцам, rspec и заводской девушке ... Я знаю, что на этот вопрос уже был дан ответ (это не так), но это мои два цента , Удачи!

3

Я думал/много боролся с этим вопросом, и вот, где я приехал.

Огурец первый и огурец последний. Огурец обеспечит первичное покрытие.

Методы базовой модели, которые выполняют настоящую деловую работу приложения, также должны быть разработаны/покрыты rspec/unit tests.

Почему блок также проверяет?

1) Модульные тесты проведут намного быстрее. 2) Эта основная бизнес-логика может (возможно,) использоваться несколькими способами за пределами текущих представлений (которые проверяет Cucumber). Эти методы должны быть забиты со всеми типами возможных входов и выходов, напрямую вызывающих метод в тесте.

Почему бы не испытать остальные модели, а также контроллеры и представления?

1) Огурец уже покрыл его один раз. 2) Я нахожу, что методы view-controller-some-model все работают вместе, чтобы добиться результата (думаю, что все осуществляется для входа); поэтому мне нравится их тестировать вместе.

+0

«Огурец первый и огурец последний» Ницца. Я думаю, что этот ответ больше на уровне, который нужны новичкам, как мне. – KobeJohn

0

Из моего опыта, Cucumber и Rspec имеют различную привлекательность. Rspec обращается ко мне с точки зрения разработчика, потому что его легко писать и обеспечивает очень быструю обратную связь, когда что-то ломается. Огурец не привлекает меня как разработчика, потому что он не работает так быстро, как Rspec. Тем не менее, Cucumber обращается ко мне как к бизнес-участнику, поскольку он обеспечивает полный охват всех функций.

Сделайте себе одолжение и продолжайте писать модульные тесты.

2

Я занимаюсь огурцом/RSpec в течение последних полугода или около того BDD.

Прежде всего, BDD нелегко войти, он будет чувствовать себя неестественно в начале.

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

Чтобы ответить на ваш вопрос. Для тестирования Javascript вам понадобится драйвер javascript, который может использоваться Capybara, который используется Cucumber.

водосвинка-WebKit является то, что все крутые дети теперь используют эти дни

Там одна важная вещь, чтобы отметить.

Интеграционные тесты проводятся медленно.

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

Моей установка теста, который я очень доволен:

Guard для загрузки Spork Spork для быстрых тестов Огурцов для тестирования интеграции Капибары-WebKit для яваскрипта тестирования RSpec для модульного тестирования

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

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