Crează JUnit Suită de testare cu exemplu: @RunWith @SuiteClasses
⚡ Rezumat inteligent
JUnit Suitele de teste agregă cazuri de testare din mai multe clase, astfel încât acestea să ruleze împreună într-o singură trecere, conduse de adnotările @RunWith(Suite.class) și @SuiteClasses și lansate printr-o clasă obișnuită de testare.

In JUnit, o suită de teste ne permite să agregăm toate cazuri de testare din mai multe clase într-un singur loc și să le rulați împreună.
Pentru a rula testul suitei, trebuie să adnotați o clasă folosind adnotările menționate mai jos:
- @RunWith(Suite.class)
- @SuiteClasses(test1.class, test2.class…) sau @Suite.SuiteClasses({test1.class, test2.class…})
Cu adnotările de mai sus, toate clasele de testare din suită vor începe să se execute una câte una. Clasa suitei în sine rămâne goală: este doar un suport pentru adnotări, iar rulatorul citește acele adnotări pentru a decide ce să execute.
Pași pentru a crea Test Suite și Test Runner
Cei patru pași de mai jos construiesc cea mai mică suită care rulează efectiv: două clase de testare obișnuite, o clasă suită care le denumește și un rulator care pornește suita dintr-o metodă principală.
Pas 1) Creați o clasă de test simplă (de exemplu, MyFirstClassTest) și adăugați o metodă adnotată cu @Test.
Prima clasă conține o singură metodă de testare goală, ceea ce este suficient pentru a demonstra că suita o preia:
Pas 2) Creați o altă clasă de test pe care să o adăugați (de exemplu, MySecondClassTest) și creați o metodă adnotată cu @Test.
A doua clasă urmează exact aceeași formă, așadar suita are două clase separate de agregat:
Pas 3) Pentru a crea o suită de teste, trebuie mai întâi să adnoți clasa cu @RunWith(Suite.class) și @SuiteClasses(class1.class, class2.class…).
Observați că clasa suitei TestSuiteExample nu declară nicio metodă de testare proprie — cele două adnotări conțin toate informațiile:
Pas 4) Creați o clasă Test Runner pentru a rula suita noastră de teste, așa cum este prezentat mai jos:
Alergătorul este un simplu Java clasă cu o metodă principală care predă clasa suită către JUnitCore:
Code Explicaţie:
- Code Linia 8: Declararea metodei principale a clasei Test care va rula metoda noastră JUnit Test.
- Code Linia 9: Executarea cazurilor de testare folosind JUnitCore.runClasses care preia numele clasei de test ca parametru (În exemplul de mai sus, utilizați TestSuiteExample.class prezentat în pasul 3).
- Code Linia 11: Procesarea rezultatului folosind o buclă for și afișarea rezultatului eșuat.
- Code Linia 13: Imprimarea rezultatului de succes.
ieșire: Iată rezultatul care arată un test reușit fără eșecuri trace, așa cum este prezentat mai jos:
Bara verde confirmă scopul unei suite: o lansare, o vizualizare a rezultatelor și ambele clase raportate sub nodul suitei, nu în două rulări separate.
JUnit Exemplu de suită de teste
Să luăm în considerare un exemplu mai complex, în care clasele din interiorul suitei afirma ceva în loc să dețină o metodă goală.
JunitTest.java
JunitTest.java este o clasă simplă adnotată cu @Alearga cu și @Suită adnotări. Puteți lista orice număr de clase din suită ca parametri, așa cum este indicat mai jos:
package guru99.junit; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ SuiteTest1.class, SuiteTest2.class, }) public class JunitTest { // This class remains empty, it is used only as a holder for the above annotations }
SuiteTest1.java
SuiteTest1.java este o clasă de test cu metode de testare care afișează un mesaj, așa cum este prezentat mai jos. Veți folosi această clasă ca membru al suitei în clasa menționată mai sus. Se bazează pe o clasă helper numită JUnitMesaj, care este definit în altă parte în același pachet și nu este reprodus aici.
package guru99.junit; import static org.junit.Assert.assertEquals; import org.junit.Test; public class SuiteTest1 { public String message = "Saurabh"; JUnitMessage junitMessage = new JUnitMessage(message); @Test(expected = ArithmeticException.class) public void testJUnitMessage() { System.out.println("Junit Message is printing "); junitMessage.printMessage(); } @Test public void testJUnitHiMessage() { message = "Hi!" + message; System.out.println("Junit Hi Message is printing "); assertEquals(message, junitMessage.printHiMessage()); System.out.println("Suite Test 2 is successful " + message); } }
SuiteTest2.java
SuiteTest2.java este o altă clasă de testare, similară cu SuiteTest1.java, având o metodă de testare pentru a afișa un mesaj așa cum este prezentat mai jos. Veți folosi această clasă ca membru al suitei în JunitTest.java.
package guru99.junit; import org.junit.Assert; import org.junit.Test; public class SuiteTest2 { @Test public void createAndSetName() { String expected = "Y"; String actual = "Y"; Assert.assertEquals(expected, actual); System.out.println("Suite Test 1 is successful " + actual); } }
producție
După executare JunitTest.java, care conține o suită care conține SuiteTest1.java și SuiteTest2.java, veți obține rezultatul de mai jos. Consola afișează mesajele produse de ambele clase:
JUnit view înregistrează aceeași rulare ca trei metode de testare reușite grupate sub clasa suite:
Notă: Etichetele consolei din acest exemplu sunt intersectate — șirul afișat de SuiteTest1 este „Suite Test 2”, iar cel afișat de SuiteTest2 este „Suite Test 1”. Listările originale sunt reproduse neschimbate, deci etichetele rămân așa cum le-a scris autorul; citiți numele clasei în JUnit vizualizare mai degrabă decât eticheta imprimată atunci când potriviți ieșirea cu sursa.
Cum se creează o suită de teste în JUnit 5
JUnit Versiunea 5 elimină complet alergătorii, deci @RunWith(Suite.class) nu există în pachetele org.junit.jupiter. Suitele au fost mutate în JUnit Platformă, care le livrează într-un artefact separat numit junit-platform-suite-engineAdăugați acea dependență, apoi adnotați o clasă cu @Suite și una dintre adnotările selectorului.
import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; import org.junit.platform.suite.api.SuiteDisplayName; @Suite @SuiteDisplayName("Guru99 suite") @SelectClasses({ SuiteTest1.class, SuiteTest2.class }) public class JunitTest { // Empty holder, exactly as in JUnit 4 }
Adnotările selectorului înlocuiesc lista unică @SuiteClasses cu o mică familie de opțiuni:
| adnotare | Ceea ce selectează |
| @SelectClass | Clase de testare individuale denumite una câte una, înlocuitor direct pentru @SuiteClasses. |
| @SelectPackages | Fiecare clasă de test din pachetul numit și din toate subpachetele sale. |
| @IncludeClassNamePatterns | Un filtru de expresii regulate aplicat peste selecție. |
| @SuiteDisplayName | Un nume lizibil afișat în raport în locul numelui clasei. |
Două alte diferențe contează în practică. A JUnit Clasa suite 5 poate declara metodele @BeforeSuite și @AfterSuite, care rulează o singură dată în întreaga suită, iar JUnit Exemplul 4 de mai sus se execută în continuare pe JUnit Platformă prin intermediul motorului vintage, astfel încât codul original de pe această pagină nu trebuie rescris pentru a continua să funcționeze.
Avantaje și limitări ale JUnit Suite de testare
O suită este un grupping mecanism, nu un cadrul de testare de sine stătător și asta modelează atât ceea ce face bine, cât și aspectele în care încetează să mai fie utilă.
Avantaje
- O lansare rulează împreună clase înrudite, deci un set de fum sau un regres setul este pornit cu o singură comandă.
- Vizualizarea rezultatelor grupează fiecare clasă sub un singur nod de suită, ceea ce face ca o eroare comună să fie mai ușor de detectat.
- Lista de membri se află în cod, așa că este revizuită și versionată ca orice alt fișier sursă.
- Aceeași clasă suite poate fi lansată dintr-un IDE, dintr-un runner precum JUnitCore sau dintr-un instrument de construire.
Limitări
- @SuiteClasses este o listă hard-coded, așa că o nouă clasă de test este omisă în mod silențios până când cineva editează suita.
- Suita nu oferă nicio garanție de comandă dincolo de ordinea în care sunt listate cursurile.
- Nimic nu este partajat între clasele membre, deci o suită nu înlocuiește un fixture sau o clasă de bază.
- Instrumentele de construire descoperă deja clasele de testare prin convenții de denumire, ceea ce face ca o suită să fie redundantă în multe proiecte.
Erori frecvente la crearea unui JUnit Suita de teste
Majoritatea problemelor legate de suite produc un mesaj scurt, nefolositor. Tabelul mapează mesajele pe care este probabil să le întâlniți cu cauza și soluția lor.
| Mesaj sau simptom | Provoca | Repara |
| inițializareError: Nu există metode rulabile | Clasa rulează ca o clasă de test obișnuită, dar conține doar adnotări. | Adăugați @RunWith(Suite.class) astfel încât rulatorul suitei să preia controlul în locul rulatorului implicit. |
| nu găsesc simbolul: clasa Suite | Importul Suite lipsește. | Importă org.junit.runners.Suite împreună cu org.junit.runner.RunWith. |
| Suita funcționează, dar se omite o oră | Clasa nu a fost niciodată adăugată la lista @SuiteClasses. | Adăugați clasa explicit sau mutați-o la @SelectPackages în JUnit 5. |
| Numele clasei nu este acceptat de compilator | @Runwith sau @suiteClasses a fost introdus cu majuscule/minuscule greșite. | Java Adnotările sunt sensibile la majuscule/minuscule: scrieți @RunWith și @SuiteClasses exact. |
| Testele din clasa suitei în sine nu rulează niciodată | O metodă @Test a fost adăugată la deținătorul suitei. | Păstrați suportul gol și mutați metoda de testare într-o clasă membră. |
Scriind suita o dată și keeping Dacă este exactă, este adevărata lucrare. Dacă lista se îndepărtează de clasele de pe disc, suita raportează culoarea verde în timp ce o parte din test de unitate setul nu se execută niciodată, unul dintre cele mai silențioase moduri de eșec din testare software.







