Autor wpisu: l3l0, dodany: 24.03.2011 22:20, tagi: symfony, php
Nauka przez testy jednostkowe
Ostatnio dowiedziałem się jaką wartość ma pisanie testów, gdy uczymy się nowej technologii lub biblioteki. Otóż napisałem klika testów do Symfony2. Chociaż było to tylko klika testów, naprawdę dużo się nauczyłem. Powiedzmy żę chcemy nauczyć się czegoś o routingu w Symfony 2.
Jak zacząć?
Najpierw powinniśmy objerzeć testy które są w komponencie. Często to wystarczy żeby zroumieć jak on działa. Jeśli mamy jakieś wątpliwości powinniśmy je rozwiązać pisząc nowy test i próbując, nawet coś popsujmy żeby zobaczyć co się stanie. Możemy próbować nieograniczoną liczbę parametrów i kombinacji. Testy jednostkowe mają tą zalete że wykonują się szybko więc szybko upewnią nas czy nasze przypuszczenia są poprawne. To podejście jest nawet lepsze gdy mamy jakiś gówniany kod.
Stary kod i też może… być testowany
Napewno znasz to uczucie gdy musisz dodać nowy kod do 6 letniego projektu o którym wszyscy zapomieli… ty nawet nie wiesz gdzie zacząć. Ja, w takim wypadku, zaczynam od ustawienia mojego środowiska testowego (albo od naprawienia i posprzątania środowiska testowego o ile istniało). Nastepnie powinniśmy przeanalizować kod i stwierdzić w których miejscach będziemy musieli zrobić zmiany. Przed dodaniem nowego kodu trzeba stworzyć test, jednak ważniejsze w tym momencie są testy dla functionalności w której grzebiemy. Jeśli nie ma testów musimy je utworzyć. Aby utworzyć testy musimy zanalizować kod. Czasami (nawet często) kodu nie da się przetestować, wtedy musimy troche pohakować (ostrożnie!) tak aby kod stał się testowalny. Po tym procesie możesz dodać nowe funkcionalności, co powinno być już łatwiejsze – twoja wiedza o kodzie wzrosła. Kodowanie teraz powinno być przyjemne, a testy powinny dać Ci większą pewność i oszczędzić dużą ilość stresu. Oczywiście twój kod jest teraz jakościowo lepszy.
Jakość i prostota kodu, a testy jednostkowe.
Testowanie powinno pomóc Ci tworzyć prosty kod, powinno Ci też pomóc tworzyć kod wysokiej jakości. Owszem ale tylko gdy robisz TDD. O ile pisanie testów po kodzie ma sens w czasie nauki, o tyle nie jest to dobre podejście z punktu widzenia projektowego, nie pomaga też tworzyć prostego kodu bo kod jest już stworzony. Pisanie testów przed kodem pomaga ustalić publiczne API oraz przede wszystkim wymagana od nas (programistów) myślenia przed napisaniem kodu. W TDD napierw piszemy test, potem kod ale tylko taki który sprawi że nasz test przejdzie (nawet głupi). Następnie musimy sprawić aby następne testy przeszły, jednak po każdej takiej iteracji powinnismy usuwać duplikaty kodu (zasada DRY czyli że nie powtarzamy się). Testy powinny być zdefiniowane tak aby otestować jak najbardziej nasze oczekiwania w stosunku do klasy.
Jest naprawdę wiele powodów żeby używać testów jednostkowych, tymbardziej nie mogę zrozumieć czemu istnieje tak wiele aplikacji bez testów.
Tutaj mam prośbę: Aplikacje potrzebują pomocy, gdy znajdziecie jakąś smutną aplikację bez testów, zlitujcie się i napiszcie parę testów!