В последнее время кажется, что Cucumber получает больше поддержки в сообществе Rails. Вот краткий аргумент, который я услышал в интервью с ведущим RSpec (из старого подкаста Ruby on Rails).
В гибком сообществе (в то время) был большой толчок для разработки, основанной на тестировании, с упором на тестирование в первую очередь, чтобы доказать, что вам нужно что-то изменить. С этим было что-то философски неправильно. По сути, тестирование - это способ убедиться, что ваша реализация верна, так как вы по-другому относитесь к дизайну вождения? Руководство RSpec предположило, что вы укажете в первую очередь, и не будет ли замечательно, если спецификация также проверит результаты вашей реализации?
Простое переименование assert
в should
помогает сосредоточить ум на правильном пути к спецификации записи, и думать о дизайне. Тем не менее, это только часть уравнения.
Что еще более важно, поскольку многие сторонники TDD утверждали, что тесты документировали проект, большинство документации было в лучшем случае плохим. Тесты довольно непрозрачны для не-разработчиков, незнакомых с языком. Даже тогда дизайн не сразу бросается в глаза после прочтения большинства тестов.
Поэтому в качестве вторичной цели RSpec разработал способ создания письменной документации на основе спецификаций. Именно эта письменная спецификация дает RSpec преимущество над простым Test :: Unit для управления дизайном приложения. Зачем писать что-то более одного раза, когда вы можете одновременно документировать и проверять согласованность проекта?
Насколько я понимаю, что Cucumber, который получил преимущество, придя позже и выучив уроки в RSpec, лучше справляется с этой вторичной целью, не теряя при этом основной цели (способность тестировать реализацию по спецификации). Cucumber делает это с помощью достаточно похожего на английский API, который могут запрограммировать непрограммисты. Им могут понадобиться помощь программистов, чтобы заполнить некоторые определения новых методов проверки, но они предназначены для расширения.
Суть в том, что RSpec / Cucumber не должны полностью заменять модульное тестирование. Они могут лучше подходить для документирования и проверки вашего проекта, но есть еще несколько тестов реализации, которые все еще необходимо выполнить, особенно с небольшими ошибками, которые связаны с реализацией, а не с дизайном приложения. Это уменьшает количество тестов, которые вы должны написать.