Cytat(IceManSpy @ 27.08.2011, 17:02:15 )

Ostatnio trochę zainteresowałem się testami jednostkowymi z wykorzystaniem PHPUnit. Zastanawiam się tylko w jaki sposób mogę testować swoje aplikację. Przykładowo chcę zrobić test, który sprawdzi mi, czy poprawnie dodaje się użytkownik do bazy danych. Jak go zrobić, aby przeszedł test, ale jednocześnie nie zmienił np wartości w auto increment?? Może to zbyt ogólny test?
1) inicjujesz strukture i polaczenie z baza, ewentualnie ladujesz niezbedne dane do przeprowadzenia testu
2) tworzysz model uzytkownika, wstawiasz dane testowe
3) uruchamiasz obiekt ktory testujesz, ktorego zadaniem jest wstawienie usera do bazy
4) pobierasz usera z bazy jako nowa instancja modelu
5) sprawdzasz czy podane dane zgadzaja sie z testowymi (assert)
Cytat(IceManSpy @ 27.08.2011, 17:02:15 )

Tak samo np test na sprawdzanie poprawności wpisania danych w formularzu (mamy np ustawione w walidatorze, że masz przechodzić tylko tekst, ktoś zamienił, że tylko liczby, to test nie powinien tego przepuścić).
- kazdy test powinien pokrywac jeden przypadek
- walidator to osobny byt, testuje sie go osobno (single responsibility)
1) tworzysz obiekt request (dostepny w Zend_Test_PHPUnit_ControllerTestCase)
2) ustawiasz typ requestu na POST i wstawiasz dane formularza
3) dispatchujesz akcje kontrolera ($this->dispatch(...))
4) sprawdzasz czy uruchomiony zostal odpowiedni modul/kontroler/akcja
5) sprawdzasz czy walidacja dziala, czyli w tym przypadku: np: nie ma zapisu do bazy danych
Cytat(LSM @ 25.09.2011, 23:37:05 )

Jednak gdy wspomniałem o TDD usłyszałem "nie mamy na to czasu proszę Pana tu się zarabia pieniądze". Pomyślałem - ok, całkowita racja. Ale przyszło mi wnikać w kody napisane przez mojego pracodawcę - i gdy robiłem małe poprawki w programie, jedynym sposobem na spr. czy wszystko działa OK było przeklikanie całego interfejsu. Po prostu żenada - gdyby były testy wystarczyłoby odpalić jeden link i po zabawie. Więc powstało pytanie: czy aby naprawdę na tym polega zarabianie pieniędzy ? W pojedynke może i tak, ale rozwój to praca z innymi ludźmi, a bez testów to nie robota, ale męczarnia w pracy grupowej.
Inna sprawa, że testy niejako wymuszają pisanie dobrego kodu który można łatwo potem dzielić na moduły itp. W tej firmie w ogóle nie było żadnych prywatnych bibliotek czy modułów, a firma ta działa już 15 lat na rynku. Zonk.

imho to jest troche zalezne od profilu firmy, wiekszosc firm poprostu nie potrzebuje TDD bo tworzy krotko zyjace projekty, w ktorych ryzyko bledu jest wzglednie tolerowane.
Ale sa takze firmy w ktorych jakosc to podstawa i za to klienci placa ciezkie pieniadze, np: uruchamianie tych samych testow z automatu na 40 srodowiskach.
Poprostu wszystko wedlug potrzeb.
Robie z TDD i CI juz troche czasu i moja obserwacja jest taka, ze jak nie masz testow to w pozniejszym zyciu projektu mase czasu marnujesz na testowanie tego samego wkolko a bledy nadal sie pojawiaja, druga strona medalu jest taka, ze malo firm jest ktore maja dlugo zyjace projekty