JUnit Samouczek adnotacji z przykładem: Co to są @Test i @After

Co to jest JUnit Adnotacje?

JUnit Adnotacje to specjalna forma metadanych syntaktycznych, do których można dodawać Java kod źródłowy dla lepszej czytelności kodu i struktury. Zmienne, parametry, pakiety, metody i klasy mogą być adnotowane. Adnotacje zostały wprowadzone w Junit4, co sprawia, że Java kod bardziej czytelny i prosty. To jest wielka różnica między Junit3 i Junit4, że Junit4 jest oparty na adnotacjach.

Dzięki znajomości adnotacji w Junit5 można łatwo nauczyć się i wdrożyć JUnit test. Poniżej znajdują się ważne i często używane JUnit lista 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 być wykonywana jako przypadek testowy.
2. @Zanim Adnotacji tej używa się, jeśli przed każdym przypadkiem testowym chcesz wykonać jakąś instrukcję, na przykład warunki wstępne.
3. @Przed zajęciami Adnotacji tej używa się, jeśli chcesz wykonać pewne instrukcje przed wszystkimi przypadkami testowymi, np. połączenie testowe, muszą zostać wykonane przed wszystkimi przypadkami testowymi.
4. @Po Tej adnotacji można użyć, jeśli chcesz wykonać kilka instrukcji po każdej Przypadek testowy na przykład resetowanie zmiennych, usuwanie plików tymczasowych, zmiennych itp.
5. @Po zajęciach Adnotacji tej można użyć, jeśli chcesz wykonać pewne instrukcje po wszystkich przypadkach testowych, np. Zwolnienie zasobów po wykonaniu wszystkich przypadków testowych.
6. @Ignoruje Adnotacji tej można użyć, jeśli chcesz zignorować niektóre instrukcje podczas wykonywania testu, np. wyłączając niektóre przypadki testowe podczas wykonywania testu.
7. @Test(limit czasu=500) Adnotacji tej można użyć, jeśli chcesz ustawić pewien limit czasu podczas wykonywania testu, np. jeśli pracujesz w ramach jakiejś umowy SLA (umowy dotyczącej poziomu usług), a testy muszą zostać ukończone w określonym czasie.
8. @Test(oczekiwany=IllegalArgumentException.class) Ta adnotacja może być używana, jeśli chcesz obsłużyć jakiś wyjątek podczas wykonywania testu. Na przykład, jeśli chcesz sprawdzić, czy konkretna metoda zgłasza określony wyjątek, czy nie.

JUnit Przykład adnotacji

Stwórzmy klasę obejmującą valid JUnit adnotacje za pomocą prostych instrukcji drukowania i wykonaj je za pomocą klasy uruchamiającej test:

Krok 1) Rozważ poniższą klasę Java zawierającą różne metody dołączone do wyżej wymienionych adnotacji:

JunitAnnotationsExample.java

package 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 {				

    private ArrayList<String> list;					

    @BeforeClass		
    public static void m1() {							
        System.out.println("Using @BeforeClass , executed before all test cases ");					
    }		

    @Before		
    public void m2() {					
        list = new ArrayList<String>();					
        System.out.println("Using @Before annotations ,executed before each test cases ");					
    }		

    @AfterClass		
    public static void m3() {							
        System.out.println("Using @AfterClass ,executed after all test cases");					
    }		

    @After		
    public void m4() {					
        list.clear();			
        System.out.println("Using @After ,executed after each test cases");					
    }		

    @Test		
    public void m5() {					
        list.add("test");					
        assertFalse(list.isEmpty());			
        assertEquals(1, list.size());			
    }		

    @Ignore		
    public void m6() {					
        System.out.println("Using @Ignore , this execution is ignored");					
    }		

    @Test(timeout = 10)			
    public void m7() {					
        System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");					
    }		

    @Test(expected = NoSuchMethodException.class)					
    public void m8() {					
        System.out.println("Using @Test(expected) ,it will check for specified exception during its execution");					

    }		

}		

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

TestRunner.java

package 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) {									
      Result result = JUnitCore.runClasses(JunitAnnotationsExample.class);					
			for (Failure failure : result.getFailures()) {							
         System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      	

Spodziewany wynik

  • Wszystkie przypadki testowe zostaną wykonane jeden po drugim, a wszystkie instrukcje print będą widoczne na konsoli.
  • Jak omówiono w powyższej tabeli @Przed adnotacją w JUnit, @BeforeClass [ metody m1() i m2() ] zostaną wykonane odpowiednio przed każdym i przed wszystkimi przypadkami testowymi.
  • W ten sam sposób @Po wejściu JUnit, @afterClass (metody m3() i m4()) zostaną wykonane odpowiednio po każdym i po wszystkich przypadkach testowych. @ignore (metoda m6()) będzie traktowana jako ignorowanie testu.

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

  1. Rozważ metodę m5() podaną poniżej:
	@Test		
    public void m5() {					
        list.add("test");					
        assertFalse(list.isEmpty());			
        assertEquals(1, list.size());			
    }		

W powyższej metodzie, gdy dodajesz ciąg znaków do zmiennej „list”, tzw

  • lista.isEmpty() zwróci fałsz.
  • asertFalse(list.isEmpty()) musi zwrócić wartość true.
  • W rezultacie przypadek testowy będzie przechodzić.

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

  • lista.rozmiar() musi zwrócić wartość int jako „1”.
  • So asertEquals(1, lista.rozmiar()) musi zwrócić wartość true.
  • W rezultacie przypadek testowy będzie przechodzić.
  1. Rozważ metodę m7() podaną poniżej:
@Test(timeout = 10)		
    public void m7() {					
        System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");					
    }		

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

  1. Rozważ metodę m8() podaną poniżej:
@Test(expected = NoSuchMethodException.class)				
    public void m8() {					
        System.out.println("Using @Test(expected) ,it will check for specified exception during its execution");					
    
    }		

Jak omówiono powyżej @Test (oczekiwany) podczas wykonywania sprawdzi, czy istnieje określony wyjątek, więc metoda m8() zgłosi „Nie ma wyjątku dla takiej metody”. W rezultacie test zostanie wykonany z wyjątkiem.

Pomyślne wykonanie testu oznacza pomyślne wykonanie wszystkich przypadków testowych.

Aktualny rezultat

Ponieważ w powyższym przykładzie są trzy przypadki testowe, wszystkie przypadki testowe zostaną wykonane jeden po drugim. Zobacz dane wyjściowe poniżej:

JUnit Przykład adnotacji
JUnit Przykład adnotacji

Zobacz poniższe instrukcje drukowania, które można zobaczyć na konsoli:

Używanie @BeforeClass , wykonywane przed wszystkimi przypadkami testowymi

Używanie adnotacji @Before, wykonywanych przed każdym przypadkiem testowym

Użycie @After, wykonywane po każdym przypadku testowym

Używanie adnotacji @Before, wykonywanych przed każdym przypadkiem testowym

Używając @Test(timeout), można go użyć do wymuszenia przekroczenia limitu czasu JUnit4 przypadek testowy

Użycie @After, wykonywane po każdym przypadku testowym

Używanie adnotacji @Before, wykonywanych przed każdym przypadkiem testowym

Używając @Test(expected) , podczas wykonywania sprawdzi, czy występuje określony wyjątek

Użycie @After, wykonywane po każdym przypadku testowym

Użycie @AfterClass, wykonywane po wszystkich przypadkach testowych

JUnit Zapewnij klasę

Ta klasa udostępnia szereg metod asercji przydatnych przy pisaniu przypadku testowego. Jeśli wszystkie instrukcje potwierdzenia zostaną przekazane, wyniki testu będą pomyślne. Jeśli jakakolwiek instrukcja potwierdzenia zakończy się niepowodzeniem, wyniki testu nie powiodą się.

Jak widziałeś wcześniej, poniższa tabela opisuje ważne metody Assert i opis:

S. No. Metoda wykonania Opis
1. voidasserEquals(oczekiwana wartość logiczna, wartość logiczna rzeczywista) Sprawdza, czy dwie wartości są równe, podobnie jak metoda równości klasy Object
2. void AsserFalse (warunek logiczny) Funkcjonalność polega na sprawdzeniu, czy warunek jest fałszywy.
3. void AsserNotNull (obiekt obiektu) Funkcjonalność „assertNotNull” polega na sprawdzeniu, czy obiekt nie ma wartości null.
4. void AsserNull (obiekt obiektu) Funkcjonalność „assertNull” polega na sprawdzeniu, czy obiekt ma wartość null.
5. void AsserTrue (warunek logiczny) Funkcja „assertTrue” polega na sprawdzeniu, czy warunek jest prawdziwy.
6. pusty błąd() Jeśli chcesz zgłosić błąd asercji, użyj funkcji Fail(), która zawsze kończy się niepowodzeniem.
7. void AsserSame([Wiadomość tekstowa] Funkcjonalność „assertSame” polega na sprawdzeniu, czy oba obiekty odnoszą się do tego samego obiektu.
8. voidasserNotSame([Wiadomość tekstowa] Funkcjonalność „assertNotSame” polega na sprawdzeniu, czy oba obiekty nie odnoszą się do tego samego obiektu.

JUnit Klasa przypadków testowych

Aby uruchomić wiele testów, dostępna jest klasa TestCase org.junit.TestCase pakiety. Adnotacja @Test mówi JUnit że tę publiczną metodę void (tutaj przypadek testowy), do której jest dołączona, można uruchomić jako przypadek testowy.

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

S. No. Metoda wykonania Opis
1. int liczbaPrzypadków Testowych() Ta metoda służy do zliczania liczby przypadków testowych wykonanych przez uruchom(TestResult tr) Metoda.
2. Wynik testu utwórzResult() Ta metoda służy do tworzenia Wynik testu obiekt.
3. Ciąg getName () Ta metoda zwraca ciąg znaków, który jest niczym innym jak a Przypadek testowy.
4. Uruchomienie wyniku testu() Ta metoda służy do wykonania testu, który zwraca a Wynik testu przedmiot
5. nieważny przebieg (wynik TestResult) Ta metoda służy do wykonania testu mającego Wynik testu obiekt, który nic nie zwraca.
6. void setName (nazwa ciągu) Ta metoda służy do ustawiania nazwy pliku Przypadek testowy.
7. unieważnij konfigurację() Ta metoda służy do pisania kodu skojarzenia zasobów. np. Utwórz połączenie z bazą danych.
8. puste rozdarcie() Metodę tę stosuje się do pisania kodu zwalniającego zasoby, np. zwalniającego połączenie z bazą danych po wykonaniu operacji transakcji.

JUnit Klasa TestResult

Kiedy wykonujesz test, zwraca on wynik (w postaci Wynik testu obiekt). Tego obiektu TestResult można użyć do analizy obiektu wynikowego. Wynik testu może zakończyć się niepowodzeniem lub sukcesem.

W poniższej tabeli przedstawiono ważne metody używane w klasie org.junit.TestResult:

S. No. Metoda wykonania Opis
1. void addError (test testowy, t rzucalny) Metodę tę stosuje się w przypadku konieczności dodania błędu do testu.
2. void addFailure(Test testowy, AssertionFailedError t) Metodę tę stosuje się w przypadku konieczności dodania awarii do listy awarii.
3. void endTest (test testowy) Ta metoda służy do powiadamiania o przeprowadzeniu (ukończeniu) testu
4. int liczba błędów() Ta metoda służy do uzyskania błędu wykrytego podczas wykonywania testu.
5. Wyliczenie błędy() Ta metoda po prostu zwraca kolekcję (tutaj wyliczenie) błędów.
6. int liczba niepowodzeń() Metoda ta służy do uzyskania liczby błędów wykrytych podczas wykonywania testu.
7. nieważne uruchomienie (test TestCase) Ta metoda służy do wykonania 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. pusty przystanek() Ta metoda służy do testowania zatrzymania uruchomienia.

JUnit Klasa pakietu testowego

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ę apartamentami testowymi.

W poniższej tabeli przedstawiono ważne metody stosowane w org.junit.TestSuite klasa:

S. No. Metoda wykonania Opis
1. void addTest(Test testowy) Metodę tę stosuje się, jeśli chcesz dodać test do pakietu.
2. void addTestSuite (Class klasa testowa) Tej metody używa się, jeśli chcesz określić klasę podczas dodawania testu do zestawu.
3. int liczbaPrzypadków Testowych() Metodę tę stosuje się, jeśli chcesz policzyć liczbę przypadków testowych.
4. Ciąg getName () Ta metoda służy do uzyskania nazwy zestawu testów.
5. nieważny przebieg (wynik TestResult) Metoda ta służy do wykonania testu i zebrania wyniku testu Wynik testu obiekt.
6. void setName (nazwa ciągu) Ta metoda służy do ustawiania nazwy Pakiet testowy.
7. Test testAt(indeks int) Metodę tę stosuje się, jeśli chcemy zwrócić test o podanym indeksie.
8. int testCount() Metodę tę stosuje się, jeśli w pakiecie ma zostać zwróconych kilka testów.
9. statyczne ostrzeżenie dotyczące testu (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 Selenium adnotacje przydatne przy pisaniu testu jednostkowego.
  • Klasy bardzo przydatne podczas pisania przypadku testowego
    • org.junit.Assert
    • org.junit.TestCase
    • org.junit.Wynik testu
    • org.junit.TestSuite
  • Ważne i często używane JUnit lista adnotacji@Przed@Przedklasą@Po

    @Po zajęciach

    @Test

    @Ignorować