Samouczek PyUnit: Python Struktura testów jednostkowych (z przykładem)

⚡ Inteligentne podsumowanie

Python Testowanie jednostkowe sprawdza małe fragmenty kodu w izolacji, aby wcześnie wykryć błędy. Tutaj poznasz techniki testowania jednostkowego, framework PyUnit (unittest), jego kluczowe klasy, sposób projektowania przypadków testowych oraz działający przykład.

  • 🧪 Co to jest: Testowanie jednostkowe polega na weryfikacji małych, odizolowanych fragmentów kodu w celu wczesnego wykrycia błędów.
  • 🔬 Techniki: TDD, stuby i mocki izolują kod, umożliwiając jednostkom przeprowadzanie niezależnych testów.
  • 🐍 Jednostka Py: PythonWbudowany moduł unittest (PyUnit) jest portem JUnit.
  • 🧱 Kluczowe klasy: TestCase, TestSuite, TestLoader, TextTestRunner i TestResults.
  • 🤖 Pomoc AI: Narzędzia AI, takie jak Copilot, natychmiast generują przypadki testowe unittest.

Python Testów jednostkowych

Co to jest testowanie jednostkowe?

Testów jednostkowych in Python ma na celu identyfikację błędów na wczesnym etapie rozwoju aplikacji, gdy błędy są mniej powtarzające się i tańsze w naprawie.

Test jednostkowy to skryptowy test poziomu kodu zaprojektowany w Python aby zweryfikować małą „jednostkę” funkcjonalności. Testy jednostkowe to framework zorientowany obiektowo, oparty na urządzeniach testowych.

Python Techniki testowania jednostkowego

Python Testowanie jednostkowe polega głównie na testowaniu konkretnego modułu bez dostępu do jakiegokolwiek zależnego kodu. Programiści mogą używać technik takich jak kody pośredniczące i makiety, aby dzielić kod na „jednostki” i przeprowadzać testy na poziomie jednostkowym poszczególnych elementów.

  • Rozwój oparty na testach TDD: Testowanie jednostkowe należy przeprowadzić wraz z Pythoni w tym celu programiści korzystają z metody Test-Driven Development. W metodzie TDD najpierw projektujesz Python Testy jednostkowe i dopiero wtedy kontynuujesz pisanie kodu, który zaimplementuje tę funkcję.
  • Stuby i makiety: Są to dwie główne techniki symulujące testowane fałszywe metody. A Kikut służy do wypełnienia zależności wymaganej do prawidłowego działania testu jednostkowego. A Drwić z drugiej strony jest to fałszywy obiekt, który uruchamia testy, w których umieszczamytwierdzenie.

    Intencje obu metod są takie same, aby wyeliminować testowanie wszystkich zależności klasy lub funkcji.

Python Ramy testów jednostkowych

Aby ułatwić proces testowania jednostkowego i poprawić jakość projektu, zaleca się Python Ramy testów jednostkowych. Struktura testów jednostkowych obejmuje

Python Techniki testowania jednostkowego

  • Jednostka Py: PyUnit obsługuje urządzenia, przypadki testowe, zestawy testów i moduł uruchamiający testy do automatycznego testowania kodu. W PyUnit możesz organizować przypadki testowe w zestawy z tymi samymi urządzeniami
  • Nos: Wbudowane wtyczki Nose'a pomagają w przechwytywaniu wyników, pokrywaniu kodu, dokumentowaniu itp. Składnia Nose'a jest znacznie prostsza i zmniejsza bariery w pisaniu testów. Rozciąga się Python unittest, aby ułatwić testowanie.
  • Dokument: Skrypt testujący Doctest jest umieszczany w dokumencie z małą funkcją na dole pliku. Doctest umożliwia przetestowanie kodu poprzez uruchomienie przykładów zawartych w dokumentacji i sprawdzenie, czy zwróciły one oczekiwane wyniki. Przypadek użycia doctest jest mniej szczegółowy i nie uwzględnia specjalnych przypadków. Są przydatne jako wyrazista dokumentacja głównego przypadku użycia modułu i jego komponentów.

Testowanie jednostkowe za pomocą PyUnit

Pyunit jest Python Port JUnit. W ramach Pyunit, w module unittest znajduje się pięć kluczowych klas.

Testowanie jednostkowe za pomocą PyUnit

  • Klasa TestCase: Klasa TestCase zawiera procedury testowe i zapewnia haczyki do wykonywania każdej procedury i późniejszego czyszczenia
  • Klasa TestSuite: Pełni funkcję kontenera kolekcji i może zawierać wiele obiektów testowych i wiele obiektów zestawów testowych
  • Klasa TestLoadera: Ta klasa ładuje przypadki testowe i zestawy zdefiniowane lokalnie lub z pliku zewnętrznego. Emituje obiekty zestawu testowego, które zawierają te zestawy i przypadki
  • Klasa TextTestRunner: Aby uruchomić testy, dostępna jest standardowa platforma do wykonywania testów
  • Klasa TestResults: Oferuje standardowy pojemnik na wyniki testów

Projektowanie przypadku testowego dla Python Testowanie przy użyciu PyUnit

Test jednostkowy zapewnia klasę bazową, przypadek testowy, który można wykorzystać do tworzenia nowych przypadków testowych. Do projektowania przypadku testowego stosowane są trzy zestawy metod

Projektowanie przypadku testowego dla Python

test jednostkowy.Przypadek testowy

setUp()
teardown()

skipTest(aMesg:string)
fail(aMesg:string)

id():string
shortDescription():string

W pierwszym zestawie znajdują się haczyki przed i po teście. Metoda setup() rozpoczyna się przed każdą procedurą testową, metoda stress() po procedurze.

Drugi zestaw metod kontroluje wykonanie testu. Obie metody przyjmują ciąg komunikatu jako dane wejściowe i obie anulują trwający test. Jednak metoda skiptest() przerywa bieżący test, podczas gdy metoda fall() kończy go całkowitym niepowodzeniem.

Ostatnia lub trzecia metoda pomaga w ustaleniu testu. Metoda id() zwraca ciąg składający się z nazwy obiektu testowego i procedury testowej. A metoda krótkaDescription() zwraca komentarz docstr na początku każdej procedury testowej.

Python Przykład testu jednostkowego

Poniższy przykład testuje prostą funkcję add() z modułem unittest. Każda metoda z prefiksem test_ uruchamia się automatycznie, a assertEqual sprawdza wynik pod kątem wartości oczekiwanej.

import unittest

def add(a, b):
    return a + b

class TestAdd(unittest.TestCase):
    def test_add_positive(self):
        self.assertEqual(add(2, 3), 5)

    def test_add_negative(self):
        self.assertEqual(add(-1, -1), -2)

if __name__ == "__main__":
    unittest.main()

Zapisz kod i uruchom go za pomocą python filename.py. Program uruchamiający unittest zgłosi liczbę testów zaliczonych lub niezaliczonych.

Zalety użytkowania Python Testy jednostkowe

  • Pomaga wykryć błędy na wczesnym etapie cyklu rozwojowego
  • Pomaga pisać lepsze programy
  • Łatwo synchronizuje się z innymi metodami i narzędziami testowymi
  • Będzie o wiele mniej błędów
  • Łatwiej jest modyfikować w przyszłości z bardzo mniejszymi konsekwencjami

FAQ

Testowanie jednostkowe weryfikuje niewielką jednostkę kodu, np. funkcję, w izolacji. Wykrywa błędy na wczesnym etapie rozwoju, gdy są tańsze i łatwiejsze do naprawienia.

PyUnit jest PythonWbudowany framework do testów jednostkowych, dostępny jako moduł unittest. Jest to port JUnit i obsługuje osprzęt, przypadki testowe, pakiety i moduł uruchamiający testy.

Utwórz podklasę unittest.TestCase, napisz metody zaczynające się od test_ i użyj w nich asercji, takich jak assertEqual. Uruchom plik za pomocą unittest.main(), aby wykonać wszystkie testy.

setUp() uruchamia się przed każdą metodą testową, aby przygotować dane testowe, natomiast tearDown() uruchamia się po każdym teście, aby je wyczyścić. Razem zapewniają one niezależność i powtarzalność testów.

Stuby dostarczają stałych danych, od których zależy test, podczas gdy obiekty pozorowane to obiekty pozorowane, względem których przeprowadza się asercję. Oba zastępują rzeczywiste zależności, więc jednostka jest testowana w izolacji.

Asystenci AI, tacy jak GitHub Copilot, generują przypadki testowe jednostkowe na podstawie funkcji, sugerują przypadki brzegowe i asercje oraz tworzą makiety zależności podczas pisania kodu.

Tak. Narzędzia oparte na sztucznej inteligencji mogą automatyzować generowanie zestawów testów, generować potwierdzenia dla oczekiwanych wyników i zwiększać pokrycie kodu poprzez sugerowanie testów dla nieprzetestowanych gałęzi.

unittest jest PythonWbudowany framework wykorzystuje klasy i metody assert, natomiast pytest to zewnętrzna biblioteka z prostszymi instrukcjami assert i zaawansowanymi funkcjami sprawdzania poprawności. Oba uruchamiają testy jednostkowe.

Podsumuj ten post następująco: