Java JUnit. introducere
JUnit este o bibliotecă pentru software-ul de testare a unităților în limba Java. JUnit este un instrument simplu și, în același timp, foarte puternic pentru scrierea testelor de unitate. Numărul copios de companii care dezvoltă software în Java. ei folosesc JUnit în stadiul dezvoltării software-ului.
În acest articol vom lua în considerare ultima versiune a JUnit în acest moment. și anume 4.1.0. Puteți descărca JUnit 4.1.0 aici.
Pentru a demonstra principalele caracteristici ale Cadrului JUnit. scrie o clasă mică:
public clasa bani
valoarea privată int;
tip privat String;
banii publici (int v, String t) <
valoare = v;
tip = t;
>
banii publici adăugați (bani m) <
returnați bani noi (valoare + m. getValue ().);
>
public int getValue () <
valoarea returnata;
>
>
Să scriem un test pentru această clasă:
import static org. JUnit. Afirmați. *;
import org.junit.Test;
clasa publica TestMoney
@Test
public void testAdd () <
Bani m1 = bani noi (12. "USD");
Banii m2 = bani noi (14. "USD");
Banii așteptați = bani noi (26. "USD");
Rezultatul băncii = m1. adăugați (m2);
dacă (rezultatul este egal (așteptat))
eșuează ("nu este egal");
>
Ce vedem aici?
Metoda testAdd () va testa, după cum indică adnotarea @Test. Această adnotare înseamnă întotdeauna metode de testare. Toate metodele de testare sunt neapărat publice. În această metodă, sunt create două obiecte din tipul de bani. Valorile 12 și 14, respectiv. Apoi obiectul așteptat este creat. care i se atribuie suma așteptată a celor două obiecte anterioare. Cel de-al patrulea obiect de tip Money este atribuit valorii reale obținute după adăugarea primelor două obiecte prin metoda add (int, String). Apoi, utilizând instrucțiunea if, comparăm sumele așteptate și reale, iar dacă nu sunt egale, raportăm acest lucru folosind metoda eșec (String). Dacă se înregistrează un defect în timpul testării unității. atunci întregul test este considerat a fi îngrădit și va fi afișat mesajul Nu este egal.
Deoarece pot exista multe astfel de verificări cu instrucțiunea if în test, pentru a nu strânge codul, următoarea metodă este mai convenabilă:
import static org. JUnit. Afirmați. *;
import org.junit.Test;
clasa publica TestMoney
@Test
public void testAdd () <
Bani m1 = bani noi (12. "USD");
Banii m2 = bani noi (14. "USD");
Banii așteptați = bani noi (26. "USD");
Rezultatul băncii = m1. adăugați (m2);
assertTrue (așteptată este egal (rezultat));
>
În acest caz, dacă expresia expected.equals (rezultat) este adevărată. atunci testul va fi trecut, în caz contrar - testul este considerat îngrădit.
În plus față de assertTrueJUnit, există multe alte modalități de a verifica:
import static org. JUnit. Afirmați. *;
import org.junit.Test;
clasa publica TestMoney
@Test
public void testAdd () <
Bani m1 = bani noi (12. "USD");
Banii m2 = bani noi (14. "USD");
Banii așteptați = bani noi (26. "USD");
Rezultatul băncii = m1. adăugați (m2);
assertFalse (așteptată este egal (rezultat)); // Dacă este adevărat, atunci testul este îngroșat
assertEquals (așteptat, rezultat); Dacă nu este egal - testul este îngroșat
assertNotNull (noul Bani (10. "USD")); // Dacă null - testul este îngroșat
assertNull (noul Bani (10. "USD")); // Dacă nu este nulă - testul este depășit
assertNotSame (așteptat, rezultat); // Dacă ambele obiecte sunt identice (nu sunt aceleași ca cele care sunt egale) - testul este plin
assertSame (așteptat, rezultat); // Dacă ambele obiecte nu sunt la fel - testul este îngroșat
>
Pentru fiecare dintre afirmațiile listate, puteți introduce primul parametru în șirul care va fi afișat dacă testul este înfundat:
assertEquals ("Eroare", așteptat, rezultat);
Dacă am avea următoarea funcție în clasa Money:
public Banii div (bani m) <
returnați bani noi (valoare / m. getValue ().);
>
A fost destul de așteptat să verificăm dacă excepția este aruncată dacă împărțim cu 0. Aceasta se poate face în felul următor:
@ Test (așteptat = Excepție.)
public void testDiv () <
Bani m1 = bani noi (12. "USD");
Bani m2 = bani noi (0. "USD");
Rezultatul băncii = m1. div (m2);
>
După cum puteți vedea, am creat o metodă de testare separată (de fapt, se recomandă crearea unei funcții separate de testare pentru fiecare funcție testată). În plus față de @Test, am specificat asteptat = Exception.class în paranteze. Aceasta înseamnă că așteptăm ca excepția să arunce o excepție. și dacă el nu va fi aruncat afară, o astfel de funcție de test de comportament - incorect (am afirmat în mod explicit că m2 în câmpul de valoare va fi 0), iar apoi testul va fi inundate.
Probabil ați observat că în fiecare funcție de testare am inițializat mai întâi valorile acelorași variabile. JUnit propune să se facă o astfel de inițializare într-o metodă separată, precedată de @ înainte de adnotare.
@Before
public void setup () <
Bani m1 = bani noi (12. "USD");
Banii m2 = bani noi (14. "USD");
>
Există mai multe astfel de metode cu @ înainte, dar toate acestea trebuie să fie publice vidate și vor fi executate înainte de toate testele la rândul lor. Dacă după testare trebuie să efectuăm și câteva acțiuni, acest lucru se face și într-o funcție separată cu @ după adnotare. De asemenea, există adnotări, cum ar fi @BeforeClass. @AfterClass - acestea vor fi chemați înainte și după crearea instanței clasei de test în consecință și trebuie să fie public static void. Pe lângă aceasta, există și un rezumat foarte interesant @Test (timeout = 1000). După expirarea timpului indicat în paranteze, în cazul în care testul nu este trecut, acesta este considerat a fi alunecat. Timpul este în milisecunde.
În cazul în care orice test pentru orice motiv bun pe care doriți să dezactivați (de exemplu, testul cade în mod constant, și să-l efectueze până o dată) poate zaannotirovat @Ignore:
@Ignore
@ Test (timeout = 1000)
public void testAdd () <
// cod
>
De asemenea, dacă puneți această adnotare pe o clasă, atunci toate testele din această clasă vor fi dezactivate.
Ei bine, aproape totul. Să începem testul pe care l-am creat în mediul Eclipse.
Creați un proiect Java și denumiți-l, de exemplu, JUnitExample. Creați o clasă Money în directorul src și plasați-o în principal:
public clasa bani <
valoarea privată int;
tip privat String;
banii publici (int v, String t) <
valoare = v;
tip = t;
>
banii publici adăugați (bani m) <
returnați bani noi (valoare + m. getValue ().);
>
public Banii div (bani m) <
returnați bani noi (valoare / m. getValue ().);
>
public int getValue () <
valoarea returnata;
>
>
De obicei, aluatul este plasat într-un dosar separat (Sourse Folder - un director sursă), și apoi într-un pachet cu același nume ca și pachetul de clasă de test. Pentru a face acest lucru, faceți clic dreapta pe numele proiectului și selectați New-> Source Folder. Dați-i testul de nume și creați pachetul principal în el. Faceți clic dreapta pe pachetul principal și selectați New-> JUnit Cazul de testare (poate fi necesar pentru a găsi acest element în celălalt. Dar nu trebuie doar să fie). Selectați un nume pentru clasa cu teste (de obicei numele începe cu cuvântul Test urmat de numele clasei testate). Să fie TestMoney. Aici puteți bifa și metodele setUpBeforeClass (). tearDownAfterClass (). setUp (). tearDown () și Eclipse vor crea metode cu adnotări @AfterClass. @BeforClass. @After. @Before. Apoi, butonul OK și descrieți clasa de testare:
import static org. JUnit. Afirmați. *;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
clasa publica TestMoney <
Bani m1;
Banii m2;
Banii așteptați;
Rezultatul banilor;
@BeforeClass
static public void setUpBeforeClass () aruncă excepția <
>
@AfterClass
public static void tearDownAfterClass () aruncă excepția <
>
@Before
public void setUp () aruncă excepția <
m1 = bani noi (12. "USD");
m2 = bani noi (14. "USD");
așteptat = bani noi (26. "USD");
rezultat = m1. adăugați (m2);
>
@After
public void tearDown () aruncă excepția <
>
@Test
public void testAdd () <
assertEquals ("Eroare", așteptat, rezultat);
>
>
Pentru a rula, trebuie să executați programul în modul Run As -> JUnit Test. După aceasta vor fi lansate toate testele. În fila JUnit apărută veți vedea rezultatul.