Zanurkuj w Pythonie/Podsumowanie

Z Wikibooks, biblioteki wolnych podręczników.

Testowanie jednostkowe to bardzo silna koncepcja, która, jeśli zostanie poprawnie wdrożona, może zarówno zredukować koszty utrzymywania, jak i zwiększyć elastyczność każdego trwającego długo projektu informatycznego. Ważne jest, aby zrozumieć, że testowanie jednostkowe nie jest panaceum, Magicznym Rozwiązywaczem Problemów czy srebrną kulą. Napisanie dobrych przypadków testowych jest trudne, a utrzymywanie ich wymaga ogromnej dyscypliny (szczególnie w sytuacjach, gdy klienci żądają natychmiastowych poprawek krytycznych błędów). Testowanie jednostkowe nie zastępuje również innych form testowania, takich jak testy funkcjonalne, testy integracyjne czy testy akceptacyjne. Jest jednak wykonalne, działa, a kiedy już zobaczycie je w działaniu, będziecie się zastanawiać, jak w ogóle mogliście bez niego żyć.

W tym rozdziale poruszyliśmy wiele spraw; część z nich nie dotyczyła wyłącznie języka Python. Biblioteki do testowania jednostkowego istnieją dla wielu różnych języków, a ich używanie wymaga jedynie zrozumienia kilku podstawowych koncepcji:

  • projektowania przypadków testowych, które są specyficzne, zautomatyzowane i niezależne
  • pisania przypadków testowych przed napisaniem testowanego kodu
  • pisania przypadków testowych, które uwzględniają poprawne dane wejściowe i spodziewają się poprawnych wyników
  • pisania przypadków testowych, które uwzględniają niepoprawne dane wejściowe i spodziewają się odpowiednich niepowodzeń
  • pisania i aktualizowania przypadków testowych przedstawiających błędy lub odzwierciedlających nowe wymagania
  • bezwzględnej refaktoryzacji w celu poprawy wydajności, skalowalności, czytelności, utrzymywalności oraz każdej innej -ności, która nie jest wystarczająca

Po przeczytaniu tego rozdziału nie powinniście mieć również żadnych problemów z wykonywaniem zadań specyficznych dla języka Python:

  • tworzeniem klas pochodnych po unittest.TestCase i pisaniem metod będących szczególnymi przypadkami testowymi
  • używaniem assertEqual do sprawdzania, czy funkcja zwróciła spodziewaną wartość
  • używaniem assertRaises do sprawdzania, czy funkcja rzuca spodziewany wyjątek
  • wywoływaniem unittest.main() w klauzuli if __name__ w celu uruchomienia wszystkich przypadków testowych na raz
  • uruchamianiem zestawu testów jednostkowych zarówno w trybie normalnym, jak i rozwlekłym