Отвечает ли огурец необходимости написания модульных тестов? - PullRequest
21 голосов
/ 19 сентября 2009

Меня немного смущает огромное количество платформ тестирования, доступных для Ruby / ROR.

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

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

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

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

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

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

Ответы [ 7 ]

20 голосов
/ 19 сентября 2009

Используйте Cucumber на высоком уровне, чтобы описать, что пользователь должен видеть и делать. Используйте RSpec, Test: Unit, Shoulda и т. Д. Для написания модульных тестов. Прямо из пасть лошади :

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

...

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

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

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

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

6 голосов
/ 19 сентября 2009

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

3 голосов
/ 13 октября 2010

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

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

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

Почему также тестируются юниты?

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

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

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

3 голосов
/ 20 сентября 2009

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

2 голосов
/ 17 ноября 2011

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

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

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

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

capybara-webkit - это то, что сейчас используют все крутые дети

Есть одна важная вещь, которую стоит отметить.

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

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

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

Щиток для загрузки спорка Spork для более быстрых тестов Огурец для интеграционных испытаний капибара-webkit для тестирования javascript RSpec для модульного тестирования

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

1 голос
/ 19 сентября 2009

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

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

0 голосов
/ 01 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...