Як розпочати роботу на TDD з Ruby on Rails? [зачинено]


167

Я знайомий з концепціями (брав тестувальні заняття в коледжі), але я не впевнений, як реально їх використовувати, оскільки я ніколи не працював над "справжнім" проектом TDD.

Я збираюся розпочати розробку проекту з використанням Ruby on Rails (швидше за все, з використанням 2.3). Цей додаток буде використовуватися для управління даними, користувачами та деякими файлами. Спочатку це не буде занадто складно, але може змінити масштаби протягом наступних 6 місяців, тому я вважаю, що це саме час, щоб отримати більше уваги до TDD.

У мене є основна ідея, як це зробити, але мені все одно потрібні деякі вказівки та поради:

  • Яку статтю про Ruby on Rails TDD 101 я повинен прочитати?

  • Що мені потрібно для тестування?

  • Який дорогоцінний камінь / плагін я повинен використовувати?

  • Чи варто використовувати rspec ? Щось ще?

  • Як тільки я пройду всі мої тестувальні заняття, як мені пройти та розгорнути їх? (наприклад: Постійна інтеграція)

  • Наскільки насправді витрачає час TDD?

  • Чи потрібно мені читати книгу про це чи можу я все зрозуміти, просто граючи з ним і читаючи онлайн-підручники? Якщо мені потрібно прочитати книгу, яку книгу?


Мені подобається вчитися на прикладах, щоб хтось міг сказати мені, як би я пішов і застосував TDD підхід до вирішення цього питання:

У мене є компанії. У мене Контакти. Контакт може бути пов’язаний з 1 компанією. Компанія може мати кілька контактів. Я хочу створити способи створення контактів, компаній та зв’язувати контакти з компаніями.

Вам не потрібно використовувати цей приклад у своїй відповіді, але це допоможе :)

Відповіді:


202

Яку статтю про Ruby on Rails TDD 101 я повинен прочитати?

Почну з посібника з тестування додатків рейок .

Також Railscast має відмінні скріншоти про те, як використовувати різні інструменти тестування.

Що мені потрібно для тестування?

Почну з моделей, оскільки їх легко перевірити. Просте правило полягає в тому, що вам потрібно охопити кожне твердження if у вашому тесті.

Ви повинні перевірити призначення методу (щоб переконатися, що він функціонує, як очікувалося), а також усі кращі випадки.

Також не забудьте закінчити тестування.

Який дорогоцінний камінь / плагін я повинен використовувати? Чи варто використовувати rspec? Щось ще?

Коли ви почнете, просто використовуйте Test Unit. Ви можете використовувати rspecабо cucumberпісля ознайомлення з основами.

Autotestце хороший інструмент, якщо ви хочете по-справжньому пройти тест. Але це "приємно" не потрібно.

Як тільки я отримаю всі мої тестувальні заняття, як мені пройти та розгорнути їх?

Не впевнений у питанні. Зазвичай ви не розгортаєте тести. Після того, як у вас будуть усі тестові класи, просто наберіть «рейк-тест», щоб запустити всі ваші тести.

Наскільки насправді витрачає час TDD?

Це дійсно економить час. Якщо вам подобається лабіринтна головоломка, ви знаєте, що її майже завжди легше вирішити, якщо ви переходите від фінішу до початку. Те саме з TDD. Без тестового керування ви постійно думаєте, «що мені робити далі». За допомогою тестового драйву тест підкаже, що робити далі (він порушується, якщо логіки немає, тому вам просто потрібно виправити зламану частину). Також у вас менше помилок, що заощадить вам багато часу в довгостроковій перспективі.

Чи потрібно мені читати книгу про це чи можу я все зрозуміти, просто граючи з ним і читаючи онлайн-підручники? Якщо мені потрібно прочитати книгу, яку книгу?

Вам не потрібна книга. Найефективніший спосіб навчитися чомусь: просто зробіть це. Поверніться до книги чи інтернет-ресурсів, як тільки ви зіткнетесь із питанням або проблемою. Це теж спритний.

У вашому прикладі потрібні тести: Контакт може бути пов’язаний з 1 компанією, Компанія може мати кілька контактів, створювати способи створення контактів та зв'язувати контакти з компаніями.

class CompanyTest <Test::Unit
    def test_relationship # test associations/relationships
        c = companies(:some_company)
        assert_equal [a list of contacts], c.contacts # make sure a company can have multiple contacts
    end
end

class ContactTest<Test::Unit
   def  test_relationships
        c = contact(:some_contact)
        assert_equal some_company, c.company # make sure the contact link to 1 company
   end

   def  test_create/add
        # test create contacts, here you need to make sure the contact is created correctly, and linked to company correctly
   end
end

3
Посилання на статтю порушено, але знайдено її тут: web.archive.org/web/20100325215651/http://bloritsch.d-haven.net/…
Fivetwentysix

13

Я створив 6-серійний відеосеріал, який викладався як публічний клас у Сан-Франциско влітку 2010 року. Матеріал охоплює тестування та ефективність розробників в Rails 2.3 за допомогою RSpec 1.3. Трохи датовані, але основні поняття стосуються рейкових шин 3 з Rspec 2.x

http://www.rubyfocus.biz/class_video/2010/07/19/rails_tdd_class_1.html




5

TDD спочатку все про написання тестів. Це в основному змушує вас написати власного клієнта, перш ніж писати код програми. Як правило, цикл пише тест для API, який не існує, запустіть тест, очікуючи його виходу з ладу, перейдіть, напишіть код API, запустіть тест ще раз і переконайтеся, що він пройшов. Потім напишіть свій наступний тест ... і так далі.

Можливо, вас також зацікавить цей посібник з рейків .



3

Який дорогоцінний камінь / плагін я повинен використовувати?

Мені завжди подобалося біду .

Наскільки насправді витрачає час TDD?

Причина, якою я завжди виступав за розробку TDD, полягає в тому, що вона фокусується на тому, як я буду реалізовувати конкретний фрагмент коду. У мене є анекдотичне відчуття, що щоразу, коли я більш дотримуюся принципів TDD, я витрачаю менше часу на переробку пізніше. Кількість витраченого часу - це те, наскільки добре ви пишете одиничні тести. Якщо одиничні тести не фіксують очікувану поведінку, витрачений на них весь час витрачається.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.