2008-09-05 13 views
41

Jestem programistą działającym w PHP. Mam ograniczone doświadczenie w korzystaniu z Test Driven Development w aplikacjach komputerowych C#. W tym przypadku użyliśmy nUnit dla frameworka testów jednostkowych.Test Driven Development w PHP

Chciałbym zacząć używać TDD w nowych projektach, ale nie jestem pewien, od czego zacząć.

Jakie są zalecenia dotyczące opartego na PHP systemu testów jednostkowych i jakie są dobre zasoby dla kogoś, kto jest nowicjuszem w koncepcji TDD?

Odpowiedz

39

Używałem zarówno PHPUnit & SimpleTest i znalazłem SimpleTest być łatwiejsze w użyciu.

Jeśli chodzi o TDD, nie miałem z nim szczęścia w najczystszym tego słowa znaczeniu. Myślę, że to głównie kwestia czasu/dyscypliny z mojej strony.

Dodanie testów po fakcie było trochę przydatne, ale moje ulubione rzeczy do zrobienia jest użycie zapisu testów SimpleTest, które testują konkretne błędy, które muszę naprawić. Dzięki temu bardzo łatwo jest sprawdzić, czy rzeczy zostały naprawione i czy są naprawione.

1

Powinieneś zajrzeć do PHPUnit, wygląda prawie jak NUnit.

2

SimpleTest to świetny system. Zacząłem z tym około 5 miesięcy temu, nigdy nie słyszałem o TDD, a SimpleTest jest łatwy do nauczenia, ale wciąż potężny. Jeśli chodzi o zasoby, obecnie czytam TDD według przykładu autorstwa Kent Becka i jest dobrze.

9

PHPUnit jest standardem, ale czasami jest też przytłaczający, więc jeśli uważasz, że jest zbyt skomplikowany, sprawdź, czy chcesz zacząć grę od phpt. Bardzo łatwo jest napisać w nim testy. Bez myślenia dla żadnego programisty.

I odpowiedzieć na twoje pytanie TDD - nie jestem pewien, czy TDD jest szeroko używane w przestrzeni PHP. Widzę, że szybki rozwój aplikacji i TDD nieco zderzają się (ściśle IMHO). TDD wymaga, abyś miał pełny obraz tego, co tworzysz, i piszesz swoje testy z góry, a następnie zaimplementujesz kod, aby przejść test.

Na przykład to, co robimy, to napisać wiele testów, kiedy skończymy. Nie zawsze jest to najlepsze podejście, ponieważ czasami kończy się to fałszywymi testami, które mijają, ale nie są naprawdę użyteczne, ale przynajmniej jest to coś, co można rozwinąć. Wewnętrznie kontynuujemy testy i zasadniczo piszemy test dla każdego znalezionego błędu. W ten sposób staje się bardziej trwały.

+0

jak dawno temu ktoś to zrobił? – mraaroncruz

+1

btw to jest # 2 na googu dla "tdd w php" i # 1 dla "tdd php"! – mraaroncruz

+2

Nie mam pojęcia, dlaczego to -1. Popieram moją opinię. Chodzi mi o to, że ledwo TDD dla szybkiego prototypów, ale prawie zawsze (w 80-90% przypadków) TDD inaczej. Ja też lubię phpt. Nie wiem, dlaczego to jest złe. Chociaż PHPUnit ma swoje zalety, wciąż jest złożoną strukturą. – Till

4

Osobiście preferuję SimpleTest. Istnieje runner testowy wiersza poleceń i tester sieciowy, a nawet Eclipse plugin pozwala na uruchamianie testów jednostkowych z samego IDE. Znalazłem połączenie Zend do PHPUnit o wiele trudniejsze do pracy, szczególnie z debuggerem.

Sposób, w jaki używamy SimpleTest na miejscu, to skrypt, który sami napisaliśmy sami: continuous integration. Za każdym razem, gdy sprawdzamy funkcję do SVN, uwzględniamy testy jednostkowe. Co godzinę skrypt CI uruchamia się i wywołuje skrypt PHP z linii poleceń, który uruchamia wszystkie nasze testy jednostkowe. W przypadku jakiejkolwiek przerwy otrzymuję wiadomość e-mail. To był świetny sposób na zmniejszenie błędów w naszych systemach.

Można jednak równie łatwo użyć czegoś takiego jak Phing, aby uruchomić testy automatycznie, na podstawie zadania cron lub za pomocą haka do sprawdzania SVN.

W rzeczywistości, jeśli chcesz skontaktować się ze mną bezpośrednio w celu uzyskania pomocy, możesz uzyskać do mnie informacje o moim profilu na SO. Chciałbym ci pomóc.

1

Kolejnym nowoczesnym narzędziem, które powinieneś obejrzeć, jest Codeception. Jest znacznie prostszy niż PHPUnit i zawiera podejście oparte na scenariuszu, co jest bardzo przydatne do generowania dokumentacji z testów.