JUnit Annotations Tutorial s primjerom: Što je @Test i @After
⚡ Pametni sažetak
JUnit Anotacije su oblik sintaktičkih metapodataka koji se dodaju Java izvorni kod kako bi izvršavatelj testa znao koje metode izvršiti, kada ih pokrenuti i koliko vremena svaka može trajati.
Što je JUnit Bilješke?
JUnit bilješke su poseban oblik sintaktičkih metapodataka koji se mogu dodati Java izvorni kod radi bolje čitljivosti i strukture koda. Varijable, parametri, paketi, metode i klase mogu se označavati. Anotacije su uvedene u JUnit 4, što čini Java kod čitljiviji i jednostavniji. To je velika razlika između JUnit 3 i JUnit 4: JUnit 4 se temelji na bilješkama.
S praktičnim znanjem ovih napomena, lako se može naučiti i implementirati JUnit test. Ispod je važno i često korišteno JUnit popis napomena, s JUnit 5 (Jupiter) ekvivalent pored svakog:
| S.No. | Bilješke | Description | JUnit 5 ekvivalenta |
|---|---|---|---|
| 1. | @Test | Ova anotacija je zamjena za junit.framework.TestCase i označava da se metoda public void kojoj je pridružena može izvršiti kao testni slučaj. | @Test (org.junit.jupiter.api) |
| 2. | @Prije | Ova se napomena koristi ako želite izvršiti neku naredbu kao što su preduvjeti prije svakog testnog slučaja. | @PrijeSvakog |
| 3. | @Prije Klase | Ova se anotacija koristi ako želite izvršiti neke naredbe prije svih testnih slučajeva, na primjer testnu vezu koja se mora otvoriti prije svih testnih slučajeva. | @PrijeSvega |
| 4. | @Nakon | Ova se napomena može koristiti ako želite izvršiti neke naredbe nakon svake Testni slučaj, na primjer resetiranje varijabli ili brisanje privremenih datoteka. | @NakonSvakog |
| 5. | @Nakon nastave | Ova se anotacija može koristiti ako želite izvršiti neke naredbe nakon svih testnih slučajeva, na primjer oslobađanje resursa nakon izvršavanja svih testnih slučajeva. | @Nakon svega |
| 6. | @Zanemariti | Ova se anotacija može koristiti ako želite ignorirati neke naredbe tijekom izvođenja testa, na primjer onemogućiti neke testne slučajeve tijekom izvođenja testa. | @Onemogućeno |
| 7. | @Test(timeout=500) | Ova se napomena može koristiti ako želite postaviti neko vremensko ograničenje tijekom izvršavanja testa, na primjer ako radite pod SLA-om (ugovor o razini usluge) i testovi se moraju dovršiti unutar određenog vremena. | @Timeout ili assertTimeout |
| 8. | @Test(očekivano=IllegalArgumentException.class) | Ova se anotacija može koristiti ako želite obraditi neku iznimku tijekom izvršavanja testa. Na primjer, ako želite provjeriti baca li određena metoda navedenu iznimku ili ne. | assertThrows |
JUnit Primjer komentara
Kreirajmo razred koji pokriva važno JUnit primjedbe s jednostavnim izjavama za ispis i izvršite ih s klasom pokretača testova:
Korak 1) Razmotrite sljedeće Java klasa s raznim metodama koje su pridružene gore navedenim anotacijama:
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"); } }
Korak 2) Napravimo klasu za izvršavanje testova za izvršavanje gornjeg testa:
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()); } }
očekivani rezultat
- Svi testni slučajevi će se izvršavati jedan po jedan, a sve naredbe za ispis mogu se vidjeti na konzoli.
- Kao što je objašnjeno u gornjoj tablici, @Before i @BeforeClass u JUnit [metode m2() i m1()] će se izvršiti prije svakog testnog slučaja i prije svih testnih slučajeva.
- Na isti način @After i @AfterClass u JUnit (metode m4() i m3()) će se izvršiti nakon svakog testnog slučaja i nakon svih testnih slučajeva. @Ignore (metoda m6()) će se tretirati kao ignoriranje testa.
Analizirajmo testne slučajeve korištene u gore navedenom Java razred detaljno:
- Razmotrimo metodu m5() kako je prikazano u nastavku:
@Test
public void m5() {
list.add("test");
assertFalse(list.isEmpty());
assertEquals(1, list.size());
}
U gornjoj metodi, dok dodajete niz znakova varijabli "list":
- list.isEmpty() vratit će false.
- assertFalse(list.isEmpty()) mora vratiti true.
- Kao rezultat toga, testni slučaj će pass.
Budući da ste na popis dodali samo jedan niz, veličina je jedan.
- list.size() mora vratiti cijeli broj vrijednosti "1".
- So assertEquals(1, list.size()) mora vratiti true.
- Kao rezultat toga, testni slučaj će pass.
- Razmotrimo metodu m7() kako je prikazano u nastavku:
@Test(timeout = 10)
public void m7() {
System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");
}
Kao što je gore navedeno, @Test(timeout = 10) koristi se za nametanje vremenskog ograničenja u testnom slučaju. Vrijednost je u milisekundama, tako da m7() mora završiti unutar 10 ms.
- Razmotrimo metodu m8() kako je prikazano u nastavku:
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
Kao što je gore navedeno, @Test(očekivano) provjerit će navedenu iznimku tijekom svog izvršavanja, pa će metoda m8() izbaciti "Nema takve iznimke metode." Kao rezultat toga, test će se izvršiti s iznimkom.
Napomena o točnosti: m8() ispisuje samo liniju, tako da se deklarirana iznimka nikada zapravo ne baca i JUnit 4 prijavljuje neuspjeh testa. Uskladite očekivani tip s onim što metoda stvarno baca. JUnit 5 piše ovo s assertThrows.
Budući da su svi testni slučajevi prošli, to rezultira uspješnim izvršenjem testa.
Stvarni rezultat
Budući da u gornjem primjeru postoje tri testna slučaja, svi će se izvršavati jedan po jedan. Pogledajte snimku zaslona konzole u nastavku:

Pogledajte dolje ispisane izjave koje se mogu vidjeti na konzoli:
Korištenje @BeforeClass, izvršeno prije svih testnih slučajeva
Korištenje napomena @Before, koje se izvode prije svakog testnog slučaja
Korištenje @After, izvršava se nakon svakog testa
Korištenje napomena @Before, koje se izvode prije svakog testnog slučaja
Korištenje @Test(timeout), može se koristiti za nametanje vremenskog ograničenja JUnit4 testni slučaj
Korištenje @After, izvršava se nakon svakog testa
Korištenje napomena @Before, koje se izvode prije svakog testnog slučaja
Korištenjem @Test(expected) , provjerit će navedenu iznimku tijekom svog izvođenja
Korištenje @After, izvršava se nakon svakog testa
Korištenje @AfterClass, izvršava se nakon svih testnih slučajeva
JUnit Potvrdi klasu
Anotacije odlučuju kada se metoda izvršava; assert metode odlučuju hoće li proći.
Ova klasa pruža niz metoda assertacije korisnih za pisanje testnog slučaja. Ako su sve assert naredbe uspješne, rezultati testa su uspješni. Ako bilo koja assert naredba ne uspije, rezultati testa su neuspješni. Namjenska JUnit tvrditi tutorijal detaljno pokriva svaku metodu.
Kao što ste ranije vidjeli, donja tablica opisuje važne Assert metode i njihov opis:
| S.No. | način | Description |
|---|---|---|
| 1. | void assertEquals(booleov očekivano, booleov stvarni) | Provjerava jesu li dvije vrijednosti jednake, slično metodi equals klase Object. |
| 2. | void assertFalse (booleov uvjet) | Funkcionalnost je provjeriti je li uvjet lažan. |
| 3. | void assertNotNull(Object object) | Funkcija "assertNotNull" služi za provjeru da objekt nije null. |
| 4. | void assertNull(Object objekt) | Funkcija “assertNull” je provjera je li objekt null. |
| 5. | void assertTrue(booleov uvjet) | Funkcija “assertTrue” služi za provjeru je li uvjet istinit. |
| 6. | void fail() | Ako želite izbaciti grešku tvrdnje, fail() uvijek rezultira presudom neuspjeh. |
| 7. | void assertSame([String poruka] | Funkcija "assertSame" služi za provjeru odnose li se dva objekta na isti objekt. |
| 8. | void assertNotSame([String poruka] | Funkcija "assertNotSame" služi za provjeru da se dva objekta ne odnose na isti objekt. |
JUnit Razred testnih slučajeva
Za pokretanje više testova, klasa TestCase dostupna je u junit.framework paket. Anotacija @Test govori JUnit da se ova javna void metoda (ovdje testni slučaj) kojoj je pridružena može pokrenuti kao testni slučaj.
Napomena o verziji: TestCase, Rezultat testa i TestSuite pripadaju nasljeđu junit.framework paket od JUnit 3. I dalje se isporučuju unutar artefakta junit 4.x, ali testovi temeljeni na anotacijama ne proširuju TestCase.
Donja tablica prikazuje neke važne metode dostupne u junit.framework.TestCase razred:
| S.No. | način | Description |
|---|---|---|
| 1. | int countTestCases() | Ova metoda se koristi za brojanje koliko testnih slučajeva je izvršeno od strane pokrenuti (TestResult tr) metoda. |
| 2. | TestResult createResult() | Ova se metoda koristi za stvaranje a Rezultat testa objekt. |
| 3. | Niz getName() | Ova metoda vraća niz koji nije ništa drugo do a TestCase Naziv. |
| 4. | TestRezult run() | Ova metoda se koristi za izvršavanje testa, koji vraća Rezultat testa objekt. |
| 5. | void run (TestResult rezultat) | Ova se metoda koristi za izvođenje testa koji ima Rezultat testa objekt koji ne vraća ništa. |
| 6. | void setName(naziv niza) | Ova metoda se koristi za postavljanje imena TestCase. |
| 7. | void SetUp() | Ova se metoda koristi za pisanje koda za povezivanje resursa, na primjer za stvaranje veze s bazom podataka. |
| 8. | praznina tearDown() | Ova se metoda koristi za pisanje koda za oslobađanje resursa, na primjer za oslobađanje veze s bazom podataka nakon izvođenja transakcijske operacije. |
JUnit Klasa TestResult
Kada izvršite test, on vraća rezultat (u obliku Rezultat testa Ovaj objekt TestResult može se koristiti za analizu rezultirajućeg objekta. Rezultat testa može biti neuspješan ili uspješan.
Pogledajte donju tablicu za važne metode korištene u klasi junit.framework.TestResult:
| S.No. | način | Description |
|---|---|---|
| 1. | void addError(Test test, Throwable t) | Ova se metoda koristi ako je potrebno dodati pogrešku testu. |
| 2. | void addFailure(Test test, AssertionFailedError t) | Ova se metoda koristi ako je potrebno dodati kvar na popis kvarova. |
| 3. | void endTest (Testni test) | Ova se metoda koristi za obavještavanje da je test proveden (završen). |
| 4. | int errorCount() | Ova metoda se koristi za otkrivanje grešaka tijekom izvođenja testa. |
| 5. | Nabrajanje pogreške() | Ova metoda jednostavno vraća kolekciju (ovdje Enumeraciju) grešaka. |
| 6. | int errorCount() | Ova metoda se koristi za dobivanje broja grešaka otkrivenih tijekom izvođenja testa. |
| 7. | void run (TestCase test) | Ova se metoda koristi za izvođenje testnog slučaja. |
| 8. | int runCount() | Ova metoda jednostavno broji izvršene testove. |
| 9. | void startTest(Testni test) | Ova se metoda koristi za obavještavanje da je test započeo. |
| 10. | void stop() | Ova se metoda koristi za zaustavljanje probnog rada. |
JUnit Klasa paketa testova
Ako želite izvršiti više testova određenim redoslijedom, to možete učiniti kombiniranjem svih testova na jednom mjestu. To mjesto naziva se skup testova, a JUnit testni paket tutorijal vodi kroz cijeli primjer.
Pogledajte donju tablicu za važne metode koje se koriste u junit.framework.TestSuite razred:
| S.No. | način | Description |
|---|---|---|
| 1. | void addTest(Testni test) | Ova se metoda koristi ako želite dodati test u paket. |
| 2. | void addTestSuite(Klasa testClass) | Ova se metoda koristi ako želite navesti klasu dok dodajete test u paket. |
| 3. | int countTestCases() | Ova se metoda koristi ako želite izbrojati testne slučajeve. |
| 4. | Niz getName() | Ova se metoda koristi za dobivanje imena paketa testova. |
| 5. | void run (TestResult rezultat) | Ova metoda se koristi za izvršavanje testa i prikupljanje rezultata testa u Rezultat testa objekt. |
| 6. | void setName(naziv niza) | Ova metoda se koristi za postavljanje imena TestSuite. |
| 7. | Testiraj testAt(int indeks) | Ova se metoda koristi ako želite vratiti test na zadanom indeksu. |
| 8. | int testCount() | Ova metoda se koristi ako želite vratiti broj testova u paketu. |
| 9. | upozorenje o statičkom testu (poruka niza) | Ova metoda vraća test koji neće uspjeti i bilježi poruku upozorenja. |
