Останнім часом здається, що огірок отримує більшу підтримку у громаді Рейлів. Ось короткий аргумент, який я почув з інтерв'ю з ведучим RSpec (зі старого Ruby on Rails Podcast).
У спритній спільноті (на той час) відбувся великий поштовх для тест-керованої розробки, наголос на тестуванні спочатку, щоб довести, що вам довелося щось змінити. З цим було щось філізофічно не так. По суті, тестування - це спосіб переконатися, що ваша реалізація правильна, тож як ви по-іншому думаєте про рушійну конструкцію? Провід RSpec припускав, що ви вказуєте спочатку, і чи не було б чудово, якби специфікація перевіряла результати вашої реалізації?
Просте перейменування assert
в should
допомагає зосередити розум на правильному шляху до специфікації записи, і думати про дизайн. Однак це лише частина рівняння.
Що ще важливіше, оскільки багато віруючих TDD стверджували, що тести підтверджували дизайн, більшість документації в кращому випадку були поганими. Тести досить непрозорі для незнайомих розробників, які не знають мову. Вже тоді дизайн не відразу видно з читання більшості тестів.
Отже, як другорядна мета, RSpec розробив спосіб генерування письмової документації із специфікацій. Саме ця письмова специфікація дає RSpec перевагу перед простим Test :: Unit для управління дизайном програми. Навіщо писати щось не раз, коли можна одночасно документувати та перевіряти узгодженість дизайну?
Я розумію, що огірок, якому вдалося пізніше піти і засвоїти уроки з RSpec, робить кращу роботу над цією вторинною метою, не втрачаючи первинної мети (здатність перевірити реалізацію з специфікації). Огірок робить це з досить англійською, як API, що непрограмісти можуть розумно ривкати. Можливо, їм потрібна допомога програмістів для заповнення деяких визначень нових методів верифікації, але вона розроблена таким чином, щоб вона була розширюваною.
Підсумок полягає в тому, що RSpec / огірок взагалі не повинні замінювати одиничне тестування. Вони, можливо, краще підходять для документування та перевірки вашого дизайну - але є кілька тестів на реалізацію, які все ще потрібно зробити, особливо з тонкими помилками, які випливають із реалізації, а не дизайну програми. Це все ж зменшує кількість тестів, які вам доведеться написати.