Loading AI tools
Z Wikipedii, wolnej encyklopedii
Test jednostkowy (ang. unit test) – metoda testowania tworzonego oprogramowania poprzez wykonywanie testów weryfikujących poprawność działania pojedynczych elementów (jednostek) programu – np. metod lub obiektów w programowaniu obiektowym lub procedur w programowaniu proceduralnym. Testowany fragment programu poddawany jest testowi, który wykonuje go i porównuje wynik (np. zwrócone wartości, stan obiektu, zgłoszone wyjątki) z oczekiwanymi wynikami – tak pozytywnymi, jak i negatywnymi (niepowodzenie działania kodu w określonych sytuacjach również może podlegać testowaniu).
Ten artykuł od 2012-01 wymaga zweryfikowania podanych informacji. |
Zaletą testów jednostkowych jest możliwość wykonywania na bieżąco w pełni zautomatyzowanych testów na modyfikowanych elementach programu, co umożliwia często wychwycenie błędu natychmiast po jego pojawieniu się i szybką jego lokalizację zanim dojdzie do wprowadzenia błędnego fragmentu do programu. Testy jednostkowe są również formą specyfikacji. Z powyższych powodów są szczególnie popularne w programowaniu ekstremalnym.
Testy można podzielić na następujące warianty:
Podejście, w którym określamy punkt początkowy oraz punkt końcowy dla przeprowadzenia testów i badamy przebieg możliwych ścieżek pomiędzy nimi. Rozpatrywane możliwe ścieżki od punktu początkowego do punktu końcowego dzielimy na dwa podejścia:
Aby zapobiec niemożności sprawdzenia kodu z powodu pętli stosujemy dwie grupy testów:
Boundary Test: zwracane wartości to zero lub jedno przejście
Interior Test: zwracana wartość to dwa przejścia
Klasa równoważności jest to zbiór danych o podobnym sposobie przetwarzania, używanych do przeprowadzenia testu. Wykonanie testu z użyciem kilku elementów zbioru, powoduje uznanie całej klasy za poprawną i zwalnia nas od testowania wszystkich elementów w np. 1000-elementowym zbiorze.
Klasy równoważności dzielą się na:
Przykłady:
Rozwinięciem testów z użyciem klas równoważności jest testowanie wartości brzegowych. Wartość brzegowa to wartość znajdująca się wewnątrz, pomiędzy lub tuż przy granicy danej klasy równoważności.
Przykłady:
Podstawowym zadaniem testowania składniowego jest sprawdzenie poprawności wprowadzanych danych do systemu.
Błędy zależne od systemu i środowiska:
W testowaniu składniowym należy pamiętać o zasadzie "garbage in – garbage out", która zadziała gdy:
W przykładzie zostało przytoczone użycie środowiska JUnit wraz z dostarczonym mechanizmem testów jednostkowych.
Testy w przykładzie dotyczą niedeterministycznego automatu skończenie stanowego. W każdym teście, oznaczonym adnotacją @Test tworzymy obiekt klasy DAUTAutomaton, następnie dodajemy stany automatu. Potem dodajemy przejścia wraz z etykietami, po których możemy udać się do określonego stanu.
Testy zaczynają się w momencie, gdy wywołujemy asercje dla żądanego napisu, aby sprawdzić czy napis jest akceptowany przez automat. Każda litera staje się etykietą przejścia od jednego stanu do drugiego i po przejrzeniu całego napisu musimy znaleźć się w tzw. stanie akceptującym.
assertTrue(A.run("ab")); // sprawdza czy dla napisu "ab" automat zwróci prawdę assertTrue(A.run("abbbbb")); // sprawdza czy dla napisu "abbbbb" automat zwróci prawdę assertTrue(A.run("c")); // sprawdza czy dla napisu "c" automat zwróci prawdę assertFalse(A.run("a")); // sprawdza czy dla napisu "a" automat zwróci fałsz, czyli nie zaakceptuje tego napisu assertFalse(A.run("xxxxxxx")); // sprawdza czy dla napisu "xxxxxxx" automat zwróci fałsz, czyli nie zaakceptuje tego napisu assertFalse(A.run("ba")); // sprawdza czy dla napisu "ba" automat zwróci fałsz, czyli nie zaakceptuje tego napisu