Tutorial JUnit Annotations cu Exemplu

Cuprins:

Anonim

Ce este Adnotările JUnit?

JUNIT ANNOTATIONS este o formă specială de meta-date sintactice care pot fi adăugate la codul sursă Java pentru o mai bună lizibilitate și structură a codului. Variabilele, parametrii, pachetele, metodele și clasele pot fi adnotate. Adnotările au fost introduse în Junit4, ceea ce face ca codul Java să fie mai ușor de citit și mai simplu. Aceasta este marea diferență între Junit3 și Junit4 că Junit4 se bazează pe adnotări.

Cu cunoștințele despre adnotări în Junit5, se poate învăța și implementa cu ușurință un test JUnit. Mai jos este lista adnotărilor importante și frecvent utilizate:

S.Nr. Adnotări Descriere
1. @Test Această adnotare este un înlocuitor al org.junit.TestCase care indică faptul că metoda de vid public la care este atașată poate fi executată ca un caz de testare.
2. @Inainte de Această adnotare este utilizată dacă doriți să executați o declarație, cum ar fi condițiile prealabile înainte de fiecare caz de testare.
3. @Înainte de curs Această adnotare este utilizată dacă doriți să executați câteva instrucțiuni înainte ca toate cazurile de testare, de exemplu conexiunea de test trebuie să fie executată înainte de toate cazurile de testare.
4. @După Această adnotare poate fi utilizată dacă doriți să executați câteva instrucțiuni după fiecare caz de testare, de ex. Resetarea variabilelor, ștergerea fișierelor temporare, variabile etc.
5. @După clasa Această adnotare poate fi utilizată dacă doriți să executați câteva instrucțiuni după toate cazurile de testare, de exemplu, eliberarea resurselor după executarea tuturor cazurilor de testare.
6. @ Ignorează Această adnotare poate fi utilizată dacă doriți să ignorați unele instrucțiuni în timpul executării testului, de exemplu pentru dezactivarea unor cazuri de testare în timpul executării testului.
7. @Test (timeout = 500) Această adnotare poate fi utilizată dacă doriți să setați o perioadă de expirare în timpul execuției testului, de exemplu, dacă lucrați în baza unui SLA (Service level agreement), iar testele trebuie finalizate într-un anumit timp specificat.
8. @Test (asteptat = IllegalArgumentException.class) Această adnotare poate fi utilizată dacă doriți să gestionați o excepție în timpul executării testului. De exemplu, dacă doriți să verificați dacă o anumită metodă aruncă sau nu o excepție specificată.

În acest tutorial, veți învăța-

  • Exemplu de adnotări JUnit
  • Clasa JUnit Assert
  • Clasa JUnit Test Cases
  • Clasa JUnit TestResult
  • Clasa JUnit Test Suite

Exemplu de adnotări JUnit

Să creăm o clasă care acoperă adnotări importante JUnit cu instrucțiuni simple de imprimare și să o executăm cu o clasă de test runner:

Pasul 1) Luați în considerare mai jos clasa java având diferite metode care sunt atașate adnotărilor enumerate mai sus:

JunitAnnotationsExample.java

pachet guru99.junit;import org.junit.Assert.assertEquals static;import org.junit.Assert.assertFalse static;import java.util.ArrayList;import org.junit.After;import org.junit.AfterClass;import org.junit.Înainte;import org.junit.BeforeClass;import org.junit.Ignore;import org.junit.Test;public class JunitAnnotationsExample {listă privată ArrayList ;@Înainte de curspublic static void m1 () {System.out.println („Folosind @BeforeClass, executat înainte de toate cazurile de testare”);}@Inainte devid public m2 () {list = new ArrayList  ();System.out.println („Folosind adnotări @Before, executate înainte de fiecare caz de testare”);}@După clasapublic static void m3 () {System.out.println („Utilizarea @AfterClass, executată după toate cazurile de testare”);}@Dupăpublic void m4 () {list.clear ();System.out.println („Folosind @After, executat după fiecare caz de testare”);}@Testpublic void m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}@Ignorapublic void m6 () {System.out.println ("Folosind @Ignore, această execuție este ignorată");}@Test (timeout = 10)public void m7 () {System.out.println („Folosind @Test (timeout), poate fi folosit pentru a impune timeout în cazul testului JUnit4”);}@Test (asteptat = NoSuchMethodException.class)public void m8 () {System.out.println ("Folosind @Test (așteptat), va verifica excepția specificată în timpul executării sale");}}

Pasul 2) să creăm o clasă de test runner pentru a executa testul de mai sus:

TestRunner.java

pachet guru99.junit;import org.junit.runner.JUnitCore;import org.junit.runner.Result;import org.junit.runner.notification.Failure;clasă publică TestRunner {public static main main (String [] args) {Rezultat rezultat = JUnitCore.runClasses (JunitAnnotationsExample.class);pentru (Eșec de eșec: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println ("Result ==" + result.wasSuccessed ());}}

rezultat asteptat

  • Toate cazurile de testare vor fi executate unul câte unul și toate instrucțiunile de tipărire pot fi văzute pe o consolă.
  • Așa cum s-a discutat în tabelul de mai sus @Before, @BeforeClass [metoda m1 () și m2 ()] vor fi executate înainte de fiecare și, respectiv, înainte de toate cazurile de testare.
  • În același mod @ after, @ afterClass (metoda m3 () și m4 ()) va fi executată după fiecare și, respectiv, după toate cazurile de testare. @ignore (metoda m6 ()) va fi tratată ca ignorând testul.

Să analizăm detaliat cazurile de test utilizate în clasa java de mai sus:

  1. Luați în considerare metoda m5 () după cum este prezentat mai jos:
@Testpublic void m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}

În metoda de mai sus, adăugați un șir în variabila „listă”, așa că

  • list.isEmpty () va returna false.
  • assertFalse (list.isEmpty ()) trebuie să returneze adevărat.
  • Ca urmare, cazul testului va trece .

Deoarece ați adăugat un singur șir în listă, dimensiunea este una.

  • list.size () trebuie să returneze valoarea int ca „1”.
  • Deci, assertEquals (1, list.size ()) trebuie să revină adevărat.
  • Ca urmare, cazul testului va trece .
  1. Luați în considerare metoda m7 () după cum este prezentat mai jos:
@Test (timeout = 10)public void m7 () {System.out.println („Folosind @Test (timeout), poate fi folosit pentru a impune timeout în cazul testului JUnit4”);}

Așa cum s-a discutat mai sus, adnotarea @Test (timeout = 10) este utilizată pentru a impune timeout-ul în cazul testului.

  1. Luați în considerare metoda m8 () după cum este prezentat mai jos:
@Test (asteptat = NoSuchMethodException.class)public void m8 () {System.out.println ("Folosind @Test (așteptat), va verifica excepția specificată în timpul executării sale");}

După cum s-a discutat mai sus, @Test (așteptat) va verifica excepția specificată în timpul executării, astfel încât metoda m8 () va arunca „Nicio astfel de excepție de metodă”. Ca urmare, testul va fi executat cu o excepție.

Deoarece toate cazurile de testare sunt trecute, acest lucru are ca rezultat o execuție cu succes a testului.

Rezultat actual

Deoarece există trei cazuri de testare în exemplul de mai sus, toate cazurile de testare vor fi executate unul câte unul. A se vedea rezultatul de mai jos :

Vedeți mai jos declarațiile de tipărire care pot fi văzute pe consolă:

Folosind @BeforeClass, executat înainte de toate cazurile de testare

Utilizând adnotări @Before, executate înainte de fiecare caz de testare

Folosind @After, executat după fiecare caz de testare

Utilizând adnotări @Before, executate înainte de fiecare caz de testare

Folosind @Test (timeout), poate fi folosit pentru a impune timeout-ul în cazul testului JUnit4

Folosind @After, executat după fiecare caz de testare

Utilizând adnotări @Before, executate înainte de fiecare caz de testare

Folosind @Test (așteptat), va verifica excepția specificată în timpul executării sale

Folosind @After, executat după fiecare caz de testare

Folosind @AfterClass, executat după toate cazurile de testare

Clasa JUnit Assert

Această clasă oferă o grămadă de metode de afirmare utile în scrierea unui caz de testare. Dacă toate declarațiile de afirmare sunt trecute, rezultatele testelor au succes. Dacă orice declarație de afirmare eșuează, rezultatele testelor sunt eșuate.

După cum ați văzut mai devreme, tabelul de mai jos descrie metode și descriere importante pentru afirmare:

S.Nr. Metodă Descriere
1. void assertEquals (boolean așteptat, boolean actual) Se verifică dacă două valori sunt similare cu metoda egală a clasei de obiecte
2. void assertFalse (stare booleană) funcționalitatea este de a verifica dacă o condiție este falsă.
3. void assertNotNull (obiect obiect) Funcționalitatea "assertNotNull" este de a verifica dacă un obiect nu este nul.
4. void assertNull (obiect obiect) Funcționalitatea "assertNull" este de a verifica dacă un obiect este nul.
5. void assertTrue (stare booleană) Funcționalitatea „assertTrue” este de a verifica dacă o condiție este adevărată.
6. void fail () Dacă doriți să aruncați orice eroare de afirmare, aveți fail () care duce întotdeauna la un verdict de eșec.
7. void assertSame ([Mesaj șir] Funcționalitatea „assertSame” este de a verifica dacă cele două obiecte se referă la același obiect.
8. void assertNotSame ([Mesaj șir] Funcționalitatea „assertNotSame” este de a verifica dacă cele două obiecte nu se referă la același obiect.

Clasa JUnit Test Cases

Pentru a rula testul multiplu, clasa TestCase este disponibilă în pachetele org.junit.TestCase . Adnotarea @Test îi spune JUnit că această metodă de vid public (Test Case aici) la care este atașată poate fi rulată ca un test test.

Tabelul de mai jos prezintă câteva metode importante disponibile în clasa org.junit.TestCase :

S.Nr. Metodă Descriere
1. int countTestCases () Această metodă este utilizată pentru a număra numărul de cazuri de testare executate prin metoda run (TestResult tr) .
2. TestResult createResult () Această metodă este utilizată pentru a crea un obiect TestResult .
3. Șir getName () Această metodă returnează un șir care nu este altceva decât un TestCase .
4. TestResult run () Această metodă este utilizată pentru a executa un test care returnează un obiect TestResult
5. rulare nulă (rezultatul TestResult) Această metodă este utilizată pentru a executa un test care are un obiect TestResult care nu returnează nimic.
6. void setName (numele șirului) Această metodă este utilizată pentru a seta numele unui TestCase.
7. void setUp () Această metodă este utilizată pentru a scrie codul de asociere a resurselor. De exemplu, creați o conexiune la baza de date.
8. void tearDown () Această metodă este utilizată pentru a scrie codul de lansare a resurselor. De exemplu, eliberați conexiunea la baza de date după efectuarea operațiunii de tranzacție.

Clasa JUnit TestResult

Când executați un test, acesta returnează un rezultat (sub forma obiectului TestResult ). Acest obiect TestResult poate fi folosit pentru a analiza obiectul rezultat. Acest rezultat al testului poate fi fie eșuat, fie reușit. Vedeți tabelul de mai jos pentru metodele importante utilizate în clasa org.junit.TestResult:
S.Nr. Metodă Descriere
1. void addError (Test de test, aruncabil t) Această metodă este utilizată dacă doriți să adăugați o eroare la test.
2. void addFailure (Test de test, AssertionFailedError t) Această metodă este utilizată dacă aveți nevoie să adăugați un eșec la lista de eșecuri.
3. void endTest (test de testare) Această metodă este utilizată pentru a notifica că se efectuează un test (finalizat)
4. int errorCount () Această metodă este utilizată pentru a obține eroarea detectată în timpul executării testului.
5. Enumerare erori () Această metodă returnează pur și simplu o colecție (Enumerare aici) de erori.
6. int failureCount () Această metodă este utilizată pentru a obține numărul de erori detectate în timpul executării testului.
7. rulare nulă (test TestCase) Această metodă este utilizată pentru a executa un caz de testare.
8. int runCount () Această metodă contorizează pur și simplu testul executat.
9. void startTest (test de test) Această metodă este utilizată pentru a anunța că a început un test.
10. void stop () Această metodă este utilizată pentru a testa rularea care trebuie oprită.

Clasa JUnit Test Suite

Dacă doriți să executați mai multe teste într-o ordine specificată, se poate face prin combinarea tuturor testelor într-un singur loc. Acest loc este numit ca suitele de testare.

Vedeți tabelul de mai jos pentru metodele importante utilizate în clasa org.junit.TestSuite :

S.Nr. Metodă Descriere
1. void addTest (test de test) Această metodă este utilizată dacă doriți să adăugați un test în suită.
2. void addTestSuite (Clasa testClass) Această metodă este utilizată dacă doriți să specificați clasa în timp ce adăugați un test în suită.
3. int countTestCases () Această metodă este utilizată dacă doriți să numărați numărul de cazuri de testare.
4. Șir getName () Această metodă este utilizată pentru a obține numele suitei de testare.
5. rulare nulă (rezultatul TestResult) Această metodă este utilizată pentru a executa un test și a colecta rezultatul testului în obiectul TestResult .
6. void setName (numele șirului) Această metodă este utilizată pentru a seta numele TestSuite .
7. Test testAt (index int) Această metodă este utilizată dacă doriți să returnați testul la un indice dat.
8. int testCount () Această metodă este utilizată dacă doriți să returnați o serie de teste în Suite.
9. avertisment de test static (mesaj String) Această metodă returnează un test care va eșua și va înregistra un mesaj de avertizare.

Rezumat:

  • JUnit oferă un API portabil, care oferă toate clasele importante și adnotările utile în scrierea unui test de unitate.
  • Cursuri care sunt foarte utile în timpul redactării unui caz de testare
    • org.junit.Assert
    • org.junit.TestCase
    • org.junit.TestResult
    • org.junit.TestSuite
  • lista adnotărilor importante și utilizate frecvent

    @Inainte de

    @Înainte de curs

    @După

    @După clasa

    @Test

    @Ignora