Jak zrobić Test Driven Development (TDD) w Drupal?

30
  • Z jakich narzędzi korzysta TDD w Drupal (moduły PHP, moduły Drupal itp.)?
  • Jak wygląda przepływ pracy zatwierdzania / testowania / wdrażania? Czy używasz Phing, PHPUnderControl, Hudson do zarządzania tym przepływem pracy?
  • W jaki sposób testy jednostkowe zwiększają niezawodność kodu?
  • Czy potrzebujesz osobnego, kosztownego, autonomicznego serwera testów jednostkowych, czy możesz to zrobić z laptopa?

Wiem, że Robert napisał tutaj znakomity artykuł techniczny na temat testów jednostkowych w Drupal z SimpleTest; Bardziej interesuje mnie omówienie części przepływu pracy i konfiguracji. Obecnie mam maszynę programistyczną, serwer pomostowy i produkcyjny. Witryny produkcyjne i sceniczne działają na procesorze Dreamhost VPS o pojemności 300 MB pamięci RAM / 300 MHz.

amator barista
źródło

Odpowiedzi:

8

W świecie ruby ​​TDD jest ułatwiony dzięki narzędziom wbudowanym w framework. Factory Girl, Mocha, rSpec i inne pozwalają programistom tworzyć łatwe i dynamiczne testy uwzględniające potrzebne przypadki testowe.

Sfrustrował mnie również brak narzędzi TDD w Drupal. Moim największym problemem z nimi jest czas potrzebny na przeprowadzenie pojedynczego testu. Cykli programowania nie można spowolnić przez pojedyncze testy trwające 60–90 sekund po każdej iteracji. Pełne pakiety testowe działałyby w wielogodzinnym przedziale czasowym, jeśli w ogóle zawracasz sobie głowę pisaniem testów.

Podejrzewam, że ma to związek z kopiowaniem pełnej bazy danych za każdym razem, gdy uruchamiany jest test, ale prawdopodobnie nie zmieni się to w najbliższej przyszłości z tego, co mogę powiedzieć, szczególnie jeśli potrzebujesz do tego DrupalWebTestCase.

Hakuję razem rozwiązanie przy użyciu Phactory i phpunit, które ręcznie ładują Drupala. Oczywiście napotkaliśmy pewne problemy i jeszcze tego nie ukończyłem, ale się to udaje.

Na szczęście większość mojej pracy dotyczy warstwy wewnętrznej, więc mogę pozostać na poziomie DRUPAL_BOOTSTRAP_DATABASE. Ale wpadam na więcej sytuacji, w których będę potrzebować pełnego stosu.

Ostatecznie TDD w Drupal nie jest dobrze obsługiwane, więc możesz napisać własny, aby działał poza ramą testową drupal lub znieść słabą wydajność.

-- AKTUALIZACJA --

Z powodzeniem skonfigurowałem pełną integrację Drupala z Phactory i teraz przeprowadzam testy za pomocą phpunit zamiast testowej witryny Drupal. To jest możliwe.

Mam nadzieję, że dojdę do punktu, w którym mogę go wydać i można go włączyć do dokumentu Phactory.

- AKTUALIZACJA 2 -

Dokument na temat konfiguracji Phactory znajduje się na stronie https://github.com/trimbletodd/phactory .

trimbletodd
źródło
Dziękuję za twój wkład. Bardzo interesujące jest to, co dzieje się z Phactory do testów jednostkowych. Z niecierpliwością czekam na moduł Drupala, który gotowałeś;)
amatorska barista
Na moim widelcu opublikowałem szybki dokument dotyczący tego, jak radzę sobie z Phactory w Drupal. Wysłałem prośbę do mistrza, ale nie została jeszcze uwzględniona. github.com/trimbletodd/phactory
trimbletodd
To pytanie i odpowiedzi wciąż powracają do tego dnia. Szalejesz za toczeniem własnego widelca / rozwiązania. Dlatego otrzymujesz nagrodę za zaakceptowaną odpowiedź, Sir.
barista amator
12

Ponieważ blog Marka jest offline, wspomnę o niektórych narzędziach, które jego zespół wdrożył:

Testy funkcjonalne: Selenium
Testy jednostkowe: Najprostszy
serwer kompilacji: Jenkins
Test porównawczy wydajności: XDebug + Cachegrind

W ciągu dwóch lat, odkąd zadałem to pytanie, zauważyłem, że niektóre dodatkowe narzędzia zyskują popularność na scenie TDD. W dzisiejszych czasach, gdy mówimy o Test Driven Development (oczywiście w kontekście Drupala), istnieją dwie strony tej samej monety - testy front-end i testy back-end.

Oto dwie prezentacje, które wyróżniają się z najnowszego Drupalcon Portland 2013 reprezentujące tę kwestię:

Rozwój, Według liczb , testowanie zaplecza.
Zautomatyzowane testowanie z Jasmine i PhantomJS , testy frontendowe.

Pierwsza prezentacja nie jest związana z testowaniem jednostkowym ani funkcjonalnym (ściśle mówiąc), chodzi raczej o narzędzia do pomiaru jakości kodu. Niemniej jednak wydaje mi się, że jest to trochę związane z tym tematem.

amator barista
źródło
1
Łał! Dziękujemy za przyjście 2 LATA później, aby poinformować nas o swoich odkryciach!
Kołysz
5

Jedyną rzeczą, o której wiem, jest to, że w przypadku wniesionych modułów możesz włączyć automatyczne testowanie zatwierdzeń i poprawek w kolejce problemów, patrz http://drupal.org/node/689990 . Nadal jest nieco niestabilny, szczególnie jeśli masz zależności.

Większość projektów prawdopodobnie robi coś więcej zgodnie z rozwojem opartym na błędach, co w zasadzie sprowadza się do napisania testu, kiedy błąd został znaleziony, a następnie naprawiony. Jeśli w ogóle ;)

Z mojego osobistego doświadczenia, TDD jest dość trudne w Drupal, ponieważ często nie piszesz (tylko) testów jednostkowych w Simpletest, ale testów integracyjnych, w których przeglądasz strony i przesyłasz formularze. Trudno więc wcześniej napisać dobre testy. Ale może po prostu nie jestem przyzwyczajony do tego :)

Berdir
źródło