Как начать работу с TDD с помощью Ruby on Rails?

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

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

У меня есть основная идея о том, как это сделать, но мне все еще нужны указания и советы:

  • Что такое Ruby on Rails TDD 101 статья читать?

  • Что мне нужно проверить?

  • Какой gem/плагин я должен использовать?

  • Должен ли я использовать rspec? Что-то еще?

  • Как только я получу все свои тестовые классы, как мне их поместить и развернуть? (например: Непрерывная интеграция)

  • Сколько времени занимает TDD?

  • Нужно ли мне читать книгу об этом или я могу получить все, просто поиграв с ней и прочитав онлайн-уроки? Если мне нужно прочитать книгу, какую книгу?


Мне нравится учиться с примерами, чтобы кто-то сказал мне, как я пойду и возьму подход TDD, чтобы решить эту проблему:

У меня есть компании. У меня есть Контакты. контакт может быть связан с 1 компанией. компания может иметь несколько контактов. я хотите создать способы создания контакты, компании и ссылки на контакты компаниям.

Вам не нужно использовать этот пример в своем ответе, но это поможет:)

Ответ 1

Что я должен прочитать в статье Ruby on Rails TDD 101?

Я начну с руководство по тестированию рельсовых приложений.

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

Что мне нужно проверить?

Я начну с моделей, так как их легко проверить. Простым правилом является то, что вам нужно покрыть каждое утверждение if в вашем тесте.

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

Также убедитесь, что вы не закончили тестирование.

Какой драгоценный камень/плагин использовать? Должен ли я использовать rspec? Что-то еще?

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

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

Как только у меня есть все мои классы тестирования, как я могу их развернуть?

Не уверен в вопросе. Обычно вы не проводите тесты. После того, как у вас есть все ваши классы тестирования, попробуйте "тест рейка" для запуска всех ваших тестов.

Сколько времени занимает TDD?

Это экономит время. Если вам нравится головоломка из лабиринта, вы знаете, что ее почти всегда легче решить, если перейти от финиша к старту. То же самое с TDD. Без Test Driven вы постоянно думаете, "что я должен делать дальше". С помощью Test Driven тест скажет вам, что делать дальше (он ломается, если логики нет, поэтому вам просто нужно исправить сломанную часть). Также у вас меньше ошибок, которые в конечном итоге сэкономят вам много времени.

Нужно ли мне читать книгу об этом или я могу получить все, просто играя вокруг с ним и читать онлайн учебники? Если мне нужно будет прочитать книгу, какая книга?

Вам не нужна книга. Самый эффективный способ узнать что-либо: просто сделайте это. Вернитесь к книге или онлайн-ресурсам, как только вы столкнетесь с вопросом или проблемой. Это тоже непроворно.

В вашем примере те вещи, которые нуждаются в тестировании: контакт может быть связан с одной компанией, компания может иметь несколько контактов, создавать способы создания контактов и связывать контакты с компаниями.

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

Ответ 2

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

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

Ответ 3

Я рекомендую эту книгу: Учебник Ruby on Rails. Я почти закончил с этим. В книге используется TDD целая книга. Попробуйте!

Ответ 5

TDD - это все о написании тестов. Это в основном заставляет вас писать собственный клиент, прежде чем писать код приложения. Цикл, как правило, записывает тест для API, который не существует, запускает тест, ожидая его отказа, запустите свой код API, снова запустите свой тест и убедитесь, что он прошел. Затем напишите свой следующий тест... и т.д.

Вы также можете быть заинтересованы в этом Rails guide.

Ответ 6

Я использую:

  • Shoulda и rspec для тестирования
  • Мокка для насмешек
  • Factory_girl для заводов
  • parallel_specs для более быстрого тестирования
  • metric_fu для анализа кода

Ответ 7

Какой gem/плагин использовать?

Мне всегда нравилось shoulda.

Сколько времени занимает TDD?

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