10 sposobów na efektywne testy jednostkowe w Pythonie

17 maja, 2021 Radosław Ganczarek

Trudno się je pisze, długo trwają, trzeba zorganizować testowe dane, testowe serwisy… Wielu programistów właśnie tak postrzega testy jednostkowe. Często to testy obwiniane są za „całe zło” w projekcie. A przecież testy mają ułatwiać życie, pozwalając nam na szybkie i proste sprawdzenie kodu i jego funkcjonalności.

Jak zatem sprawić, aby testowanie w Pytest było przyjemnością?

W moim webinarze pokażę Ci 10 metod na efektywne unit testy w Pythonie. Sposoby te wypracowałem przez kilka lat mojej pracy i stosuję je w praktyce.

Zanim je wyliczę, warto przypomnieć, czym są testy jednostkowe.

Mówiąc najprościej, testy jednostkowe mają testować jedną rzecz.

Zwykle uznaje się, że jest to jedna klasa, lub mówiąc inaczej, jedna odpowiedzialność, jaką spełnia ten kod. Jeśli znajome jest Ci pojęcie piramidy testów, to wiesz, że testy jednostkowe znajdują się na samym dole piramidy. Oznacza to, że tych testów powinno być więcej, bo są łatwiejsze do napisania i pozwalają szybciej sprawdzić konkretne funkcjonalności. Testy jednostkowe to podstawowe narzędzie, które daje natychmiastową informację zwrotną na temat kodu.

 

Python Developer - praca w PGS Software

 

Jakie są zatem moje tricki na pisanie efektywnych testów jednostkowych w Pythonie?

Pierwsze dwa sposoby korzystają z zasad SOLID, pozostałe dotyczą narzędzi pomocnych w testowaniu. W nagraniu dokładnie omawiam wszystkie sposoby, pokazuję również przykładowy kod. Tutaj tylko zasygnalizuję Ci, czego możesz się spodziewać.

10 technik poprawy jakości testów w Pytest

  1. Single-responsibility principle (SOLID) – rozdzielamy kod tak mocno, aby jedna funkcja i jedna klasa spełniała tylko jedną odpowiedzialność. Stosowanie tej zasady w pisaniu kodu sprawi, że testowanie będzie dużo łatwiejsze.
  2. Dependency Inversion i technika Dependency Injection – zamiast robić kod, który będzie w środku używał zewnętrznych serwisów, można zrobić to tak, że kod będzie dostawał serwis jako obiekt.

Dalej przechodzimy już stricte do narzędzi, które pomagają w pisaniu testów w Pytest.

  1. mark.paremetrize – gdy masz do napisania wiele podobnych testów
  2. Freezegun i pytest-freezegun – gdy musisz „zatrzymać czas” i np. przetestować obiekt, który ustawia godzinę
  3. Factory boy – gdy trzeba szybko tworzyć fixtury
  4. Faker – gdy potrzebne są losowe dane
  5. Capsys i caplog – gdy potrzebujesz podejrzeć strumienie i logi
  6. mkstemp i mkdtemp – gdy potrzebujesz plików tymczasowych
  7. Klasa random – gdy potrzebujesz okiełznać losowość
  8. Dodatkowe moduły dla paczki, której używasz, czyli spróbuj znaleźć to sam!

 

Więcej możesz obejrzeć w nagraniu poniżej. A jakie są Twoje sposoby na skuteczne testy jednostkowe w Pythonie? Daj znać w komentarzu pod filmem!

 

Najnowsze wpisy