Programsko izvođenje JUnit testova iz Java aplikacije
1. Pregled
U ovom uputstvu ćemo pokazati kako pokrenuti JUnit testove izravno s Java koda - postoje scenariji u kojima ova opcija dobro dođe.
Ako ste novi u JUnit-u ili ako želite nadograditi na JUnit 5, možete provjeriti neke od mnogih vodiča koje imamo o toj temi.
2. Ovisnosti Mavena
Trebat će nam nekoliko osnovnih ovisnosti za pokretanje testova JUnit 4 i JUnit 5:
org.junit.jupiter junit-jupiter-engine 5.2.0 test org.junit.platform junit-platform-launcher 1.2.0 // za JUnit 4 junit junit 4.12 test
Najnovije verzije JUnit 4, JUnit 5 i JUnit Platform Launcher mogu se naći na Maven Central.
3. Pokretanje testova JUnit 4
3.1. Testni scenarij
I za JUnit 4 i za JUnit 5 postavit ćemo nekoliko klasa testa „rezerviranog mjesta“ što će biti dovoljno za demonstraciju naših primjera:
javna klasa FirstUnitTest {@Test public void whenThis_thenThat () {assertTrue (true); } @Test public void whenSomething_thenSomething () {assertTrue (true); } @Test public void whenSomethingElse_thenSomethingElse () {assertTrue (true); }}
javna klasa SecondUnitTest {@Test public void whenSomething_thenSomething () {assertTrue (true); } @Test public void whensomethingElse_thenSomethingElse () {assertTrue (true); }}
Kada koristimo JUnit 4, kreiramo dodavanje test klasa @Test napomena za svaku ispitnu metodu.
Možemo dodati i druge korisne bilješke, kao što su @Prije ili @Nakon, ali to nije u dosegu ovog vodiča.
3.2. Izvođenje jednog testnog predavanja
Za pokretanje JUnit testova iz Java koda možemo koristiti JUnitCore razred (s dodatkom TextListener klasa, koja se koristi za prikaz rezultata u System.out):
JUnitCore junit = novi JUnitCore (); junit.addListener (novi TextListener (System.out)); junit.run (FirstUnitTest.class);
Na konzoli ćemo vidjeti vrlo jednostavnu poruku koja ukazuje na uspješne testove:
Izvođenje jedne klase testa: .. Vrijeme: 0,019 OK (2 testa)
3.3. Pokretanje višestrukih ispitnih tečajeva
Ako želimo za određivanje višestrukih klasa ispitivanja s JUnit 4 možemo koristiti isti kod kao za jednu klasu i jednostavno dodati dodatne klase:
JUnitCore junit = novi JUnitCore (); junit.addListener (novi TextListener (System.out)); Rezultat rezultata = junit.run (FirstUnitTest.class, SecondUnitTest.class); resultReport (rezultat);
Imajte na umu da je rezultat pohranjen u instanci JUnit-a Proizlaziti klase, koju ispisujemo jednostavnom korisnom metodom:
javna statička void resultReport (rezultat rezultata) {System.out.println ("Završeno. Rezultat: Neuspjesi:" + result.getFailureCount () + ". Zanemareno:" + result.getIgnoreCount () + ". Testovi:" + rezultat .getRunCount () + ". Vrijeme:" + result.getRunTime () + "ms."); }
3.4. Pokretanje testnog paketa
Ako trebamo grupirati neke ispitne razrede kako bismo ih pokrenuli, možemo stvoriti TestSuite. Ovo je samo prazna klasa u kojoj specificiramo sve klase koristeći JUnit bilješke:
@RunWith (Suite.class) @ Suite.SuiteClasses ({FirstUnitTest.class, SecondUnitTest.class}) javna klasa MyTestSuite {}
Za pokretanje ovih testova ponovno ćemo upotrijebiti isti kod kao i prije:
JUnitCore junit = novi JUnitCore (); junit.addListener (novi TextListener (System.out)); Rezultat rezultata = junit.run (MyTestSuite.class); resultReport (rezultat);
3.5. Izvođenje ponovljenih testova
Jedna od zanimljivih značajki JUnit-a je ta da možemo ponovite testove stvaranjem primjeraka Ponovljeni test. To može biti od velike pomoći kada testiramo slučajne vrijednosti ili za provjeru izvedbe.
U sljedećem ćemo primjeru pokrenuti testove iz MergeListsTest pet puta:
Test test = novi JUnit4TestAdapter (FirstUnitTest.class); RepeatedTest repeatTest = novi RepeatedTest (test, 5); JUnitCore junit = novi JUnitCore (); junit.addListener (novi TextListener (System.out)); junit.run (ponovljeniTest);
Evo, koristimo JUnit4TestAdapter kao omot za našu probnu klasu.
Čak i programski možemo izrađivati apartmane, primjenjujući ponovljena testiranja:
TestSuite mySuite = novi ActiveTestSuite (); JUnitCore junit = novi JUnitCore (); junit.addListener (novi TextListener (System.out)); mySuite.addTest (novi ponovljeni test (novi JUnit4TestAdapter (FirstUnitTest.class), 5)); mySuite.addTest (novi ponovljeni test (novi JUnit4TestAdapter (SecondUnitTest.class), 3)); junit.run (mySuite);
4. Pokretanje testova JUnit 5
4.1. Testni scenarij
S JUnit 5 koristit ćemo iste primjere klasa testa kao i za prethodni demo - FirstUnitTest i SecondUnitTest, s nekim manjim razlikama zbog drugačije verzije JUnit okvira, poput paketa za @Test i metode tvrđenja.
4.2. Trčanje pojedinačne ispitne klase
Za pokretanje testova JUnit 5 iz Java koda postavit ćemo instancu LauncherDiscoveryRequest. Koristi graditeljsku klasu u kojoj moramo postaviti selektore paketa i filtere za testiranje naziva klase kako bismo dobili sve testne klase koje želimo pokrenuti.
Ovaj je zahtjev tada povezan s pokretačem, a prije izvođenja testova postavit ćemo i plan ispitivanja i preslušavač izvršenja.
Obje će ponuditi informacije o testovima koji će se izvesti i rezultatima:
javna klasa RunJUnit5TestsFromJava {SummaryGeneratingListener listener = new SummaryGeneratingListener (); javna void runOne () {LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request () .selectors (selectClass (FirstUnitTest.class)) .build (); Pokretač pokretača = LauncherFactory.create (); TestPlan testPlan = lanser.discover (zahtjev); launcher.registerTestExecutionListeners (slušatelj); launcher.execute (zahtjev); } // glavna metoda ...}
4.3. Pokretanje višestrukih test klasa
Na zahtjev možemo postaviti selektore i filtre za pokretanje višestrukih klasa ispitivanja.
Pogledajmo kako možemo postaviti selektore paketa i filtre naziva klase testiranja kako bismo dobili sve klase testiranja koje želimo pokrenuti:
public void runAll () {LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request () .selectors (selectPackage ("com.baeldung.junit5.runfromjava")) .filters (includeClassNamePatterns (". * Test")) .build (); Pokretač pokretača = LauncherFactory.create (); TestPlan testPlan = lanser.discover (zahtjev); launcher.registerTestExecutionListeners (slušatelj); launcher.execute (zahtjev); }
4.4. Rezultat testa
U glavni() metodu nazivamo razredom, a slušatelja koristimo i za dobivanje detalja o rezultatu. Ovaj put rezultat se pohranjuje kao TestExecutionSummary.
Najjednostavniji način za izvlačenje njegovih podataka jest ispis u izlazni tok konzole:
javna statička void glavna (String [] args) {RunJUnit5TestsFromJava runner = new RunJUnit5TestsFromJava (); runner.runAll (); Sažetak TestExecutionSummary = runner.listener.getSummary (); summary.printTo (novi PrintWriter (System.out)); }
To će nam dati detalje našeg probnog rada:
Probno pokretanje završeno nakon 177 ms [7 spremnika pronađeno] [0 preskočenih spremnika] [7 spremnika pokrenuto] [0 spremnika prekinuto] [7 spremnika uspješno] [0 spremnika nije uspjelo] [10 testova pronađeno] [0 preskočenih testova] [10 započetih ispitivanja ] [0 testova poništeno] [10 testova uspješno] [0 testova nije uspjelo]
5. Zaključak
U ovom smo članku pokazali kako se programski pokreću testovi JUnit iz Java koda, pokrivajući JUnit 4, kao i nedavnu verziju ovog okvira za testiranje JUnit 5.
Kao i uvijek, implementacija ovdje prikazanih primjera dostupna je na GitHub-u za oba primjera JUnit 5, kao i za JUnit 4.