Samouczek dotyczący adnotacji JUnit z przykładem

Co to są adnotacje JUnit?

JUNIT ANNOTATIONS to specjalna forma składniowych metadanych, które można dodawać do kodu źródłowego Java w celu uzyskania lepszej czytelności i struktury kodu. Zmienne, parametry, pakiety, metody i klasy mogą być opatrzone adnotacjami. Adnotacje zostały wprowadzone w Junit4, dzięki czemu kod Java jest bardziej czytelny i prostszy. To jest duża różnica między Junit3 i Junit4, że Junit4 jest oparty na adnotacjach.

Znając adnotacje w Junit5, można łatwo nauczyć się i zaimplementować test JUnit. Poniżej znajduje się lista ważnych i często używanych adnotacji:

S.No. Adnotacje Opis
1. @Test Ta adnotacja zastępuje org.junit.TestCase, która wskazuje, że publiczna metoda void, do której jest dołączona, może zostać wykonana jako przypadek testowy.
2. @Przed Ta adnotacja jest używana, jeśli chcesz wykonać jakąś instrukcję, taką jak warunki wstępne przed każdym przypadkiem testowym.
3. @Przed zajęciami Ta adnotacja jest używana, jeśli chcesz wykonać pewne instrukcje, zanim wszystkie przypadki testowe, np. Połączenie testowe, będą musiały zostać wykonane przed wszystkimi przypadkami testowymi.
4. @Po Ta adnotacja może być użyta, jeśli chcesz wykonać pewne instrukcje po każdym przypadku testowym, np. Do resetowania zmiennych, usuwania plików tymczasowych, zmiennych itp.
5. @Po zajęciach Ta adnotacja może być użyta, jeśli chcesz wykonać niektóre instrukcje po wszystkich przypadkach testowych, np. Zwolnienie zasobów po wykonaniu wszystkich przypadków testowych.
6. @Ignores Ta adnotacja może być użyta, jeśli chcesz zignorować niektóre instrukcje podczas wykonywania testów, np. Aby wyłączyć niektóre przypadki testowe podczas wykonywania testów.
7. @Test (limit czasu = 500) Ta adnotacja może być używana, jeśli chcesz ustawić limit czasu podczas wykonywania testów, np. Jeśli pracujesz w ramach jakiejś umowy SLA (Umowa o poziomie usług), a testy muszą zostać zakończone w określonym czasie.
8. @Test (oczekiwano = IllegalArgumentException.class) Ta adnotacja może być użyta, jeśli chcesz obsłużyć wyjątek podczas wykonywania testu. Na przykład, jeśli chcesz sprawdzić, czy dana metoda zgłasza określony wyjątek, czy nie.

W tym samouczku nauczysz się:

  • Przykład adnotacji JUnit
  • Klasa JUnit Assert
  • Klasa przypadków testowych JUnit
  • Klasa JUnit TestResult
  • JUnit Test Suite Class

Przykład adnotacji JUnit

Stwórzmy klasę obejmującą ważne adnotacje JUnit z prostymi instrukcjami print i wykonajmy ją z klasą testową:

Krok 1) Rozważ poniższą klasę java, która ma różne metody, które są dołączone do wyżej wymienionych adnotacji:

JunitAnnotationsExample.java

pakiet guru99.junit;import static org.junit.Assert.assertEquals;import static org.junit.Assert.assertFalse;import java.util.ArrayList;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Ignore;import org.junit.Test;public class JunitAnnotationsExample {prywatna lista ArrayList ;@Przed zajęciamipublic static void m1 () {System.out.println ("Using @BeforeClass, wykonywane przed wszystkimi przypadkami testowymi");}@Przedpublic void m2 () {list = new ArrayList  ();System.out.println ("Korzystanie z adnotacji @Before, wykonywane przed każdym przypadkiem testowym");}@Po zajęciachpublic static void m3 () {System.out.println ("Używanie @AfterClass, wykonywane po wszystkich przypadkach testowych");}@Popublic void m4 () {list.clear ();System.out.println ("Używanie @After, wykonywane po każdym przypadku testowym");}@Testpublic void m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}@Ignorowaćpublic void m6 () {System.out.println ("Używając @Ignore, to wykonanie jest ignorowane");}@Test (limit czasu = 10)public void m7 () {System.out.println ("Używając @Test (limit czasu), może służyć do wymuszania przekroczenia limitu czasu w przypadku testowym JUnit4");}@Test (oczekiwano = NoSuchMethodException.class)public void m8 () {System.out.println ("Używając @Test (oczekiwane), sprawdzi określony wyjątek podczas wykonywania");}}

Krok 2) Stwórzmy klasę uruchamiającą testy, aby wykonać powyższy test:

TestRunner.java

pakiet guru99.junit;import org.junit.runner.JUnitCore;import org.junit.runner.Result;import org.junit.runner.notification.Failure;public class TestRunner {public static void main (String [] args) {Wynik wynikowy = JUnitCore.runClasses (JunitAnnotationsExample.class);for (Failure failure: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println ("Wynik ==" + result.wasSuccessful ());}}

Spodziewany wynik

  • Wszystkie przypadki testowe będą wykonywane jeden po drugim, a wszystkie instrukcje print można zobaczyć na konsoli.
  • Jak omówiono w powyższej tabeli @Before, @BeforeClass [metoda m1 () i m2 ()] zostanie wykonana odpowiednio przed każdym i przed wszystkimi przypadkami testowymi.
  • W ten sam sposób @ after, @ afterClass (metoda m3 () i m4 ()) zostaną wykonane odpowiednio po każdym i po każdym przypadku testowym. @ignore (metoda m6 ()) będzie traktowane jako ignorowanie testu.

Przeanalizujmy szczegółowo przypadki testowe użyte w powyższej klasie Java:

  1. Rozważ metodę m5 (), jak podano poniżej:
@Testpublic void m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}

W powyższej metodzie jak dodajesz string do zmiennej "lista" czyli tzw

  • list.isEmpty () zwróci false.
  • assertFalse (list.isEmpty ()) musi zwracać wartość true.
  • W rezultacie przypadek testowy przejdzie .

Ponieważ dodałeś tylko jeden ciąg na liście, więc rozmiar wynosi jeden.

  • list.size () musi zwracać wartość int równą „1”.
  • Zatem assertEquals (1, list.size ()) musi zwracać wartość true.
  • W rezultacie przypadek testowy przejdzie .
  1. Rozważ metodę m7 (), jak podano poniżej:
@Test (limit czasu = 10)public void m7 () {System.out.println ("Używając @Test (limit czasu), może służyć do wymuszania przekroczenia limitu czasu w przypadku testowym JUnit4");}

Jak omówiono powyżej, adnotacja @Test (timeout = 10) służy do wymuszenia przekroczenia limitu czasu w przypadku testowym.

  1. Rozważ metodę m8 (), jak podano poniżej:
@Test (oczekiwano = NoSuchMethodException.class)public void m8 () {System.out.println ("Używając @Test (oczekiwane), sprawdzi określony wyjątek podczas wykonywania");}

Jak omówiono powyżej, @Test (oczekiwano) sprawdzi określony wyjątek podczas wykonywania, więc metoda m8 () zgłosi „No Such Method Exception”. W rezultacie test zostanie wykonany z wyjątkiem.

Zaliczenie wszystkich przypadków testowych skutkuje pomyślnym wykonaniem testu.

Aktualny rezultat

Ponieważ w powyższym przykładzie istnieją trzy przypadki testowe, wszystkie przypadki testowe zostaną wykonane jeden po drugim. Zobacz wyniki poniżej :

Zobacz poniżej wypisz instrukcje, które można zobaczyć na konsoli:

Używając @BeforeClass, wykonywane przed wszystkimi przypadkami testowymi

Korzystanie z adnotacji @Before, wykonywane przed każdym przypadkiem testowym

Używając @After, wykonywane po każdym przypadku testowym

Korzystanie z adnotacji @Before, wykonywane przed każdym przypadkiem testowym

Używając @Test (limit czasu), można go użyć do wymuszenia przekroczenia limitu czasu w przypadku testowym JUnit4

Używając @After, wykonywane po każdym przypadku testowym

Korzystanie z adnotacji @Before, wykonywane przed każdym przypadkiem testowym

Używając @Test (oczekiwano), sprawdzi określony wyjątek podczas jego wykonywania

Używając @After, wykonywane po każdym przypadku testowym

Używając @AfterClass, wykonywane po wszystkich przypadkach testowych

Klasa JUnit Assert

Ta klasa udostępnia kilka metod asercji przydatnych przy pisaniu przypadku testowego. Jeśli wszystkie instrukcje assert są pomyślne, wyniki testów są pomyślne. Jeśli jakakolwiek instrukcja assert nie powiedzie się, wyniki testu nie powiodą się.

Jak widzieliście wcześniej, poniższa tabela opisuje ważne metody i opis Assert:

S.No. metoda Opis
1. void assertEquals (oczekiwana wartość logiczna, rzeczywista wartość logiczna) Sprawdza, czy dwie wartości są równe, podobnie jak metoda equals klasy Object
2. void assertFalse (warunek logiczny) funkcjonalność polega na sprawdzeniu, czy warunek jest fałszywy.
3. void assertNotNull (obiekt Object) Funkcjonalność „assertNotNull” polega na sprawdzaniu, czy obiekt nie jest pusty.
4. void assertNull (obiekt Object) Funkcjonalność „assertNull” polega na sprawdzaniu, czy obiekt jest pusty.
5. void assertTrue (warunek logiczny) Funkcją „assertTrue” jest sprawdzenie, czy warunek jest prawdziwy.
6. void fail () Jeśli chcesz zgłosić błąd asercji, użyj funkcji fail (), która zawsze skutkuje werdyktem niepowodzenia.
7. void assertSame ([wiadomość tekstowa] Funkcjonalność „assertSame” polega na sprawdzeniu, czy te dwa obiekty odnoszą się do tego samego obiektu.
8. void assertNotSame ([wiadomość tekstowa] Funkcjonalność „assertNotSame” polega na sprawdzeniu, czy te dwa obiekty nie odnoszą się do tego samego obiektu.

Klasa przypadków testowych JUnit

Aby uruchomić wiele testów, klasa TestCase jest dostępna w pakietach org.junit.TestCase . Adnotacja @Test mówi JUnit, że ta publiczna metoda void (tutaj Test Case), do której jest dołączona, może zostać uruchomiona jako przypadek testowy.

Poniższa tabela przedstawia kilka ważnych metod dostępnych w klasie org.junit.TestCase :

S.No. metoda Opis
1. int countTestCases () Ta metoda służy do zliczania liczby przypadków testowych wykonanych przez metodę run (TestResult tr) .
2. TestResult createResult () Ta metoda służy do tworzenia obiektu TestResult .
3. Ciąg getName () Ta metoda zwraca ciąg, który jest niczym innym jak TestCase .
4. TestResult run () Ta metoda służy do wykonywania testu, który zwraca obiekt TestResult
5. void run (wynik TestResult) Ta metoda służy do wykonywania testu mającego obiekt TestResult, który nic nie zwraca.
6. void setName (nazwa ciągu) Ta metoda służy do ustawiania nazwy TestCase.
7. void setUp () Ta metoda służy do pisania kodu powiązania zasobów. np. Utwórz połączenie z bazą danych.
8. void tearDown () Ta metoda służy do pisania kodu zwalniania zasobów. np. Zwolnij połączenie z bazą danych po wykonaniu operacji transakcyjnej.

Klasa JUnit TestResult

Kiedy wykonujesz test, zwraca on wynik (w postaci obiektu TestResult ). Ten obiekt TestResult może służyć do analizowania wynikowego obiektu. Ten wynik testu może zakończyć się niepowodzeniem lub pomyślny. Poniższa tabela zawiera ważne metody używane w klasie org.junit.TestResult:
S.No. metoda Opis
1. void addError (Test testowy, Throwable t) Ta metoda jest używana, jeśli chcesz dodać błąd do testu.
2. void addFailure (test testowy, AssertionFailedError t) Ta metoda jest używana, jeśli chcesz dodać błąd do listy niepowodzeń.
3. void endTest (test testowy) Ta metoda służy do powiadamiania o wykonaniu (zakończeniu) testu
4. int errorCount () Ta metoda służy do uzyskania błędu wykrytego podczas wykonywania testu.
5. Błędy wyliczenia () Ta metoda po prostu zwraca kolekcję (wyliczenie tutaj) błędów.
6. int failureCount () Ta metoda służy do uzyskania liczby błędów wykrytych podczas wykonywania testu.
7. void run (test TestCase) Ta metoda służy do wykonywania przypadku testowego.
8. int runCount () Ta metoda po prostu zlicza wykonany test.
9. void startTest (test testowy) Ta metoda służy do powiadamiania o rozpoczęciu testu.
10. void stop () Ta metoda służy do testowania przebiegu, który ma zostać zatrzymany.

JUnit Test Suite Class

Jeśli chcesz wykonać wiele testów w określonej kolejności, możesz to zrobić, łącząc wszystkie testy w jednym miejscu. To miejsce nazywa się zestawami testowymi.

Poniższa tabela zawiera ważne metody używane w klasie org.junit.TestSuite :

S.No. metoda Opis
1. void addTest (test testowy) Ta metoda jest używana, jeśli chcesz dodać test do zestawu.
2. void addTestSuite (Class testClass) Ta metoda jest używana, jeśli chcesz określić klasę podczas dodawania testu do zestawu.
3. int countTestCases () Ta metoda jest używana, jeśli chcesz policzyć liczbę przypadków testowych.
4. Ciąg getName () Ta metoda służy do pobierania nazwy zestawu testów.
5. void run (wynik TestResult) Ta metoda służy do wykonania testu i zebrania wyniku testu w obiekcie TestResult .
6. void setName (nazwa ciągu) Ta metoda służy do ustawiania nazwy TestSuite .
7. Test testAt (indeks int) Ta metoda jest używana, jeśli chcesz zwrócić test o podanym indeksie.
8. int testCount () Ta metoda jest używana, jeśli chcesz zwrócić kilka testów w pakiecie.
9. ostrzeżenie dotyczące testu statycznego (komunikat tekstowy) Ta metoda zwraca test, który zakończy się niepowodzeniem i zarejestruje komunikat ostrzegawczy.

Podsumowanie:

  • JUnit zapewnia przenośny interfejs API, który udostępnia wszystkie ważne klasy i adnotacje przydatne podczas pisania testów jednostkowych.
  • Klasy bardzo przydatne przy pisaniu przypadku testowego
    • org.junit.Assert
    • org.junit.TestCase
    • org.junit.TestResult
    • org.junit.TestSuite
  • lista ważnych i często używanych adnotacji

    @Przed

    @Przed zajęciami

    @Po

    @Po zajęciach

    @Test

    @Ignorować

Interesujące artykuły...