Jak zacząć korzystać z TDD z Ruby on Rails? [zamknięte]

Jestem zaznajomiony z pojęciami (brałem lekcje testowe na studiach), ale nie jestem pewien, jak naprawdę z nich korzystać, ponieważ nigdy nie pracowałem nad" prawdziwym " projektem TDD.

Mam zamiar rozpocząć rozwój projektu przy użyciu Ruby on Rails (najprawdopodobniej przy użyciu 2.3). Ta aplikacja będzie używana do zarządzania danymi, użytkownikami i niektórymi plikami. Na początku nie będzie to zbyt skomplikowane, ale może znacznie wzrosnąć w ciągu najbliższych 6 miesięcy, więc uważam, że jest to odpowiedni moment, aby bardziej zaangażować się w TDD.

I ' ve got a podstawowy pomysł na to, jak to zrobić, ale nadal potrzebuję wskazówek i porad:

  • Jaki artykuł Ruby on Rails TDD 101 mam poczytać?

  • Co muszę przetestować?

  • Jakiego klejnotu / wtyczki powinienem użyć?

  • Czy powinienem używać rspec ? Coś jeszcze?

  • Jak mam wdrożyć wszystkie zajęcia testowe, gdy już mam je wszystkie? (np.: ciągła Integracja)

  • Jak czasochłonne TDD naprawdę jest?

  • Czy muszę przeczytać książkę na ten temat, Czy Mogę uzyskać wszystko po prostu bawiąc się nią i czytając samouczki online? Jeśli muszę przeczytać książkę, Jaką książkę?


Lubię uczyć się na przykładach, więc może mi ktoś powiedzieć, jak bym poszedł i przyjął podejście TDD, aby rozwiązać ten problem:

Mam firmy. Mam kontakty. A kontakt można powiązać z 1 firmą. A firma może mieć wiele kontaktów. I chcesz tworzyć sposoby tworzenia kontakty, firmy i linki do firm.

nie musisz używać tego przykładu w swojej odpowiedzi, ale to by pomogło :)

Author: marcgg, 2009-09-06

7 answers

Jaki artykuł Ruby on Rails TDD 101 powinienem przeczytać?

Zacznę od przewodnika po testowaniu aplikacji rails .

Również Railscast ma kilka doskonałych screencastów o tym, jak korzystać z różnych narzędzi testowych.

Co muszę przetestować?

Zacznę od modeli, ponieważ są łatwe do przetestowania. Prosta zasada polega na tym, że musisz pokryć każde stwierdzenie if w swoim teście.

Powinieneś przetestować cel metoda (aby upewnić się, że działa zgodnie z oczekiwaniami), jak również wszystkie przypadki krawędzi.

Upewnij się również, że nie skończysz na testach.

Jakiego klejnotu / wtyczki powinienem użyć? Czy powinienem używać rspec? Coś jeszcze?

Kiedy zaczniesz, po prostu użyj Test Unit. Możesz użyć rspec lub cucumber po zapoznaniu się z podstawami.

Autotest to ładne narzędzie, jeśli chcesz być naprawdę napędzany testami. Ale to jest "miłe mieć" nie wymagane.

Kiedy już mam wszystkie zajęcia testowe, jak mam je wdrożyć?

Nie jestem pewien co do pytania. Zazwyczaj nie przeprowadzasz testów. Po ukończeniu wszystkich klas testowych wpisz "test rake", aby uruchomić wszystkie testy.

Jak czasochłonne jest TDD?

To naprawdę oszczędza czas. Jeśli lubisz labirynt puzzle, wiesz, że prawie zawsze łatwiej jest go rozwiązać, jeśli przejść od mety do początku. To samo z TDD. Bez Badania Napędzany konsekwentnie myślisz "co powinienem zrobić dalej". W przypadku Test Driven test powie Ci, co masz zrobić dalej (łamie się, jeśli nie ma logiki, więc musisz tylko naprawić uszkodzoną część). Ponadto masz mniej błędów, które pozwolą Ci zaoszczędzić dużo czasu na dłuższą metę.

Czy muszę przeczytać książkę o tym lub Czy Mogę dostać wszystko tylko grając wokół z nim i czytanie w Internecie tutoriale? Jeśli muszę przeczytać książkę, Jaką książkę?

Nie potrzebujesz książki. Najbardziej efektywnym sposobem uczenia się czegokolwiek jest: po prostu to zrób. Wróć do książki lub zasobów internetowych, gdy napotkasz pytanie lub problem. To też jest zwinne.

W twoim przykładzie rzeczy, które wymagają przetestowania, to: kontakt może być połączony z 1 firmą, firma może mieć wiele kontaktów, tworzyć sposoby tworzenia kontaktów i łączyć kontakty z firmami.

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
 197
Author: ez.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-20 11:16:56

Wyprodukowałem 6-odcinkową serię wideo, która była nauczana jako Publiczna klasa w San Francisco latem 2010 roku. Materiał obejmuje testowanie i wydajność programisty w Rails 2.3 przy użyciu RSpec 1.3. Nieco przestarzały, ale główne koncepcje dotyczą Rails 3 z Rspec 2.x

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

 13
Author: Wolfram Arnold,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-17 08:35:18

Polecam tę książkę: Ruby on Rails Tutorial . Prawie skończyłem. Książka wykorzystuje TDD Cała książka. Spróbuj!

 9
Author: sivabudh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-20 12:18:33

Polecam tę książkę: Agile Web Development with Rails

 8
Author: JRL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-06 20:03:39

TDD polega przede wszystkim na pisaniu testów. To w zasadzie zmusza cię do napisania własnego klienta przed napisaniem kodu aplikacji. Cykl zazwyczaj polega na napisaniu testu dla nieistniejącego API, uruchomieniu testu oczekując, że się nie powiedzie, napisaniu kodu API, ponownym uruchomieniu testu i upewnieniu się, że przejdzie. Więc napisz następny test... i tak dalej.

Może cię również zainteresować ten przewodnik Rails guide .

 5
Author: Andy Gaskell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-06 20:43:33

Używam:

  1. i rspec do testów
  2. Mocha do wyśmiewania
  3. Factory_girl dla fabryk
  4. parallel_specs do szybszego testowania
  5. metric_fu do analizy kodu
 5
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-24 18:22:21

Jakiego klejnotu / wtyczki powinienem użyć?

Zawsze cieszyłem się .

Jak czasochłonne jest TDD?

Powodem, dla którego zawsze faworyzowałem rozwój TDD, jest to, że skupia się na tym, jak będę implementował konkretny fragment kodu. Mam anegdotyczne wrażenie, że za każdym razem, gdy bardziej przestrzegam zasad TDD, spędzam mniej czasu na przeróbkach. Ilość czasu spędzonego zależy od tego, jak dobrze piszesz testy jednostkowe. Jeżeli testy jednostkowe nie uchwyć oczekiwanego zachowania, cały czas spędzony na nich jest marnowany.

 3
Author: Patrick Robertson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-06 22:56:01