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:
- 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ć.
- 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.
- 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:
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ć