Testy jednostkowe - WTF

0

Cześć. Ostatnimi czasy w wielu miejscach spotykałem się z wychwalaniem testów jednostkowych, wręcz z koniecznością ich używania (książka "Clean Code"). Teraz z ciekawości postanowiłem dogłębniej się tym zainteresować. A akurat piszę sobie pewien projekt oparty na frameworku, a więc i MVC.

Problem jest w tym, że nie mam pojęcia, jak to praktycznie zrealizować, kiedy wszystko mam podzielone na kontrolery/modele/klasy widoków/różne helpery i wszystko jest od siebie zależne. Nie mam pojęcia jak w ogóle mam zacząć, co testować...Domyślam się że powinienem skopiować całą strukturę plików zawierających klasy do folderu z testami, wywalić kod z metod i pisać w zamian tego testy....

Wydaje mi się to trochę dziwne, ale innej możliwości nie widzę. Testować wszystko, czy tylko wybrane części kodu? Jeśli tylko części, to jakie części?

Dajmy na to, że stworzyłem sobie klasę, która odpowiada za wyświetlanie informacji o pomyślnym/niepomyślnym wykonaniu jakiejś akcji. W kontrolerach stosuję sobie wtedy wywołania Helper_Redirect::execute('Pomyślnie coś zrobiłeś'), i wtedy funkcja execute() wyświetla plik widoku z daną wiadomością (i jeszcze wszystko przechodzi przez klasę widoku...). Co w takim przypadku testować? To, czy w execute() jest dany parametr? Czy jest odpowiedniego typu? Czy widok został pokazany? Wszystko po kolei?

Wiem, że te testy powinno się pisać najlepiej przed pisaniem kodu, a nie jak już jest cały projekt prawie skończony, ale co tam :P

Prosiłbym o jakiekolwiek nakierowanie mnie na właściwą ścieżkę,
Dzięki i pozdrawiam

0

Moim zdaniem zainteresuj się Behavior Driven Development, czyli specyficzną wariacją TDD: http://dannorth.net/introducing-bdd/ Jak to przeczytasz to powinieneś mieć lekko lepsze rozeznanie co testować. Najwięcej da ci oczywiście praktyka - w miarę jak będziesz coraz więcej kodził zauważysz, które rodzaje testów są tobie najbardziej pomocne i na nich będziesz się skupiał. To co testować zależy w pewnej mierze od języka, np w językach kaczo typowanych nieraz testuje się zgodność typów/ obecność metod/ itp
Na szybko znalazłem frameworkd BDD do PHP w Google: http://behat.org/

0
khernik napisał(a):

Wydaje mi się to trochę dziwne, ale innej możliwości nie widzę. Testować wszystko, czy tylko wybrane części kodu? Jeśli tylko części, to jakie części?

Głównie to te części, w których może wystąpić błąd, jak masz czysty setter i getter:

void setColor(string colorTMP){
color = colorTMP;
}
string getColor(){
return color;
}

To jest średni sens testować tak proste funkcje, jednak jak masz już coś bardziej skomplikowanego, jakiś większy algorytm, sporo działań matematycznych, walidowanie inputu, to trzeba pokusić się o więcej testów.
Z mojego krótkiego doświadczenia mogę Ci powiedzieć, że raz złapałem się na swojej ignorancji. Dla mnie nie ma różnicy (w user-input) czy napiszę 0.1 czy 0,1. Napisałem funkcję, która miała pobierać string i castować na double, jak już łatwo się domyślić, (dzień przed oddaniem pracy) napisałem test, do którego właśnie ładowałem string liczby napisanej z przecinkiem, program wysypywał się całkowicie wtedy ;) Naprawa to jeden prosty regExp, a mogło przysporzyć problemów w przyszłości klientowi.

0

jesli wszystko od siebie jest zalezne to znaczy ze Twoj kod powinien byc przerobiony tak, zeby pozbyc sie tych zaleznosci.

0

Chodziło mi bardziej o zależności pomiędzy kontrolerem, modelem, a widokiem; kontroler wywołuje odpowiednie funkcje z modelu na podstawie czegoś tam i wyświetla coś itd...

Dzięki wszystkim za odpowiedzi, jak tylko doprowadzę wszystko do porządu po przeinstalowaniu XAMPPa to przejrze wszystko z Twojego linka @Wibowit (w kodzie tego frameworka, behat, przed nazwami klasy był jakiś operator "use Class...", IDE wywalało błędy przy tym, pierwsze widzę taki operator to myślałem że to kwestia tego że nie mam najnowszej wersji PHP więc przeinstalowałem xamppa).

3

Test jednostkowe mają testować coś, co się da przetestować, i co jest sens testować w ten sposób, czyli głównie logikę biznesową, która jest zawarta w Modelu, ewentualnie jakieś pomocnicze algorytmy. Kontrolery niby też można testować, w sensie tego, czy zwracają odpowiedni widok, ale MSZ, szybciej i łatwiej to zrobić klikając niż pisząc testy. ;)

Generalnie nie ma co liczyć na to, że w dziale PHP wypowie się jakiś programista PHP, który słyszał kiedykolwiek o testach jednostkowych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1