Как начать работу на TDD с Ruby on Rails? [закрытый]



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



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



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




  • что Рубин на рельсах TDD 101 статья
    мне стоит почитать?


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


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


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


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


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


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





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




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




вы не должны использовать этот пример в вашем ответе, но это поможет :)

593   7  

7 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

в вашем примере вещи, которые нуждаются в тестировании: контакт может быть связан с 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

Я выпустил 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

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

Я рекомендую эту книгу: гибкая Веб-разработка с Rails

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

вы также можете быть заинтересованы в этом направляющие.

Я использую :

  1. должен и rspec для тестирования
  2. Мокко за издевательство
  3. Factory_girl для фабрик
  4. parallel_specs для более быстрого тестирования
  5. metric_fu для анализа кода

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

Мне всегда нравилось должен был.

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

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

Comments

    Ничего не найдено.