Zanurkuj w Pythonie/Testowanie - nurkujemy

Z Wikibooks, biblioteki wolnych podręczników.

Nurkujemy[edytuj]

Teraz, kiedy w pełni zdefiniowaliśmy zachowanie funkcji konwertujących, zrobimy coś odrobinę niespodziewanego: napiszemy zestaw testów, który pokaże, co te funkcje potrafią, a także upewni nas, że robią dokładnie to, co chcemy. Dobrze usłyszeliście: zaczniemy od napisania kodu testującego kod, który nie został jeszcze napisany.

Takie podejście nazywa się testowaniem jednostkowym, ponieważ zestaw dwóch funkcji konwertujących może być napisany i przetestowany jako jednostka, niezależnie od kodu większego programu, jakiego częścią może się ów zestaw stać w przyszłości. Python posiada gotowe narzędzie służące do testowania jednostkowego - moduł o nazwie unittest.


Testowanie jednostkowe jest ważnym elementem strategii rozwoju oprogramowania, w której na pierwszym miejscu stawia się testowanie. Jeśli ma być napisany jakiś test, to ważne jest, aby był on napisany jak najwcześniej (możliwie przed napisaniem testowanego kodu) oraz aby był aktualizowany wraz ze zmieniającymi się wymaganiami. Testowanie jednostkowe nie zastępuje testowania wyższego poziomu, takiego jak testowanie funkcjonalne czy systemowe, ale jest bardzo istotne we wszystkich fazach rozwoju oprogramowania:

  1. Jeszcze przed napisaniem kodu zmusza nas do sprecyzowania i wyrażenia wymagań w użyteczny sposób.
  2. Podczas pisania kodu chroni nas od niepotrzebnego kodowania. Kiedy wszystkie testy przechodzą, testowana funkcja jest już gotowa.
  3. Podczas refaktoryzacji upewnia nas, że nowa wersja kodu zachowuje się tak samo, jak stara.
  4. W procesie utrzymania kodu ochrania nas, kiedy ktoś przychodzi do nas z krzykiem, że nasza ostatnia zmiana popsuła jego stary kod ("Ależ proszę pana, kiedy wysyłałem kod do repozytorium wszystkie testy przechodziły...").
  5. Podczas programowania w zespole zwiększa pewność, że nowy kod, który chcemy dodać, nie popsuje kodu innych osób, ponieważ najpierw uruchomimy ich testy (Widziałem to już podczas tzw. sprintów. Zespół dzieli zadanie między siebie, każdy otrzymuje specyfikację tego, nad czym będzie pracować, pisze do tego testy jednostkowe, a następnie dzieli się tymi testami z pozostałymi członkami zespołu. W ten sposób nikt nie posunie się zbyt daleko w rozwijaniu kodu, który nie współdziała z kodem innych osób).