Kjører JUnit-tester programmatisk fra et Java-program

1. Oversikt

I denne opplæringen viser vi hvordan du kjører JUnit-tester direkte fra Java-kode - det er scenarier der dette alternativet kommer til nytte.

Hvis du er ny på JUnit, eller hvis du vil oppgradere til JUnit 5, kan du sjekke noen av mange opplæringsprogrammer vi har om emnet.

2. Maven-avhengigheter

Vi trenger et par grunnleggende avhengigheter for å kjøre både JUnit 4 og JUnit 5-tester:

  org.junit.jupiter junit-jupiter-engine 5.2.0 test org.junit.platform junit-platform-launcher 1.2.0 // for JUnit 4 junit junit 4.12 test 

De nyeste versjonene av JUnit 4, JUnit 5 og JUnit Platform Launcher finnes på Maven Central.

3. Kjører JUnit 4-tester

3.1. Test Scenario

For både JUnit 4 og JUnit 5 setter vi opp noen "plassholder" testklasser som vil være nok til å demonstrere eksemplene våre:

public class FirstUnitTest {@Test public void whenThis_thenThat () {assertTrue (true); } @Test offentlig ugyldig nårSomething_thenSomething () {assertTrue (true); } @Test offentlig ugyldig nårSomethingElse_thenSomethingElse () {assertTrue (true); }}
offentlig klasse SecondUnitTest {@Test offentlig ugyldig nårSomething_thenSomething () {assertTrue (true); } @Test offentlig ugyldig whensomethingElse_thenSomethingElse () {assertTrue (true); }}

Når du bruker JUnit 4, lager vi testklasser som legger til @Test kommentar til hver testmetode.

Vi kan også legge til andre nyttige kommentarer, for eksempel @Før eller @Etter, men det er ikke innenfor rammen av denne opplæringen.

3.2. Kjører en enkelt testklasse

For å kjøre JUnit-tester fra Java-kode, kan vi bruke JUnitCore klasse (med tillegg av TextListener klasse, brukes til å vise utdataene i System.out):

JUnitCore junit = ny JUnitCore (); junit.addListener (ny TextListener (System.out)); junit.run (FirstUnitTest.class);

På konsollen ser vi en veldig enkel melding som indikerer vellykkede tester:

Kjører en testklasse: .. Tid: 0,019 OK (2 tester)

3.3. Kjører flere testklasser

Hvis vi vil for å spesifisere flere testklasser med JUnit 4 kan vi bruke samme kode som for en enkelt klasse, og bare legge til de ekstra klassene:

JUnitCore junit = ny JUnitCore (); junit.addListener (ny TextListener (System.out)); Resultat resultat = junit.run (FirstUnitTest.class, SecondUnitTest.class); resultReport (resultat);

Merk at resultatet er lagret i en forekomst av JUnit Resultat klasse, som vi skriver ut ved hjelp av en enkel verktøymetode:

offentlig statisk ugyldig resultatReport (Resultatresultat) {System.out.println ("Ferdig. Resultat: Feil:" + resultat.getFailureCount () + ". Ignorert:" + resultat.getIgnoreCount () + ". Testkjøring:" + resultat .getRunCount () + ". Tid:" + resultat.getRunTime () + "ms."); } 

3.4. Kjører en testsuite

Hvis vi trenger å gruppere noen testklasser for å kunne kjøre dem, kan vi opprette en TestSuite. Dette er bare en tom klasse der vi spesifiserer alle klasser ved hjelp av JUnit-merknader:

@RunWith (Suite.class) @ Suite.SuiteClasses ({FirstUnitTest.class, SecondUnitTest.class}) offentlig klasse MyTestSuite {}

For å kjøre disse testene bruker vi igjen samme kode som før:

JUnitCore junit = ny JUnitCore (); junit.addListener (ny TextListener (System.out)); Resultat resultat = junit.run (MyTestSuite.class); resultReport (resultat);

3.5. Kjører gjentatte tester

En av de interessante egenskapene til JUnit er at vi kan gjenta tester ved å lage forekomster av Gjentatt test. Dette kan være veldig nyttig når vi tester tilfeldige verdier eller for ytelseskontroller.

I neste eksempel kjører vi testene fra MergeListsTest fem ganger:

Test test = ny JUnit4TestAdapter (FirstUnitTest.class); RepeatedTest repeatTest = ny RepeatedTest (test, 5); JUnitCore junit = ny JUnitCore (); junit.addListener (ny TextListener (System.out)); junit.run (gjentatt test);

Her bruker vi JUnit4TestAdapter som en innpakning for testklassen vår.

Vi kan til og med lage suiter programmatisk ved å bruke gjentatte tester:

TestSuite mySuite = ny ActiveTestSuite (); JUnitCore junit = ny JUnitCore (); junit.addListener (ny TextListener (System.out)); mySuite.addTest (ny RepeatedTest (ny JUnit4TestAdapter (FirstUnitTest.class), 5)); mySuite.addTest (ny RepeatedTest (ny JUnit4TestAdapter (SecondUnitTest.class), 3)); junit.run (mySuite);

4. Kjører JUnit 5-tester

4.1. Test Scenario

Med JUnit 5 bruker vi de samme prøvetestklassene som for forrige demo - FirstUnitTest og SecondUnitTest, med noen mindre forskjeller på grunn av en annen versjon av JUnit framework, som pakken for @Test og påstandsmetoder.

4.2. Kjører enkelt testklasse

For å kjøre JUnit 5-tester fra Java-kode, setter vi opp en forekomst av LauncherDiscoveryRequest. Den bruker en byggerklasse der vi må sette pakkevelgere og teste klassens navnefiltre, for å få alle testklassene vi vil kjøre.

Denne forespørselen blir deretter assosiert med en bærerakett, og før vi utfører testene, setter vi også opp en testplan og en kjørelytter.

Begge disse vil gi informasjon om testene som skal utføres og om resultatene:

offentlig klasse RunJUnit5TestsFromJava {SummaryGeneratingListener lytter = ny SummaryGeneratingListener (); public void runOne () {LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request () .selectors (selectClass (FirstUnitTest.class)) .build (); Launcher launcher = LauncherFactory.create (); TestPlan testPlan = launcher.discover (forespørsel); launcher.registerTestExecutionListeners (lytter); launcher.execute (forespørsel); } // hovedmetode ...}

4.3. Kjører flere testklasser

Vi kan sette velgere og filtre til forespørselen om å kjøre flere testklasser.

La oss se hvordan vi kan sette pakkevelgere og teste klasse navnefiltre, for å få alle testklasser som vi vil kjøre:

public void runAll () {LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request () .selectors (selectPackage ("com.baeldung.junit5.runfromjava")) .filters (includeClassNamePatterns (". * Test")) .build (); Launcher launcher = LauncherFactory.create (); TestPlan testPlan = launcher.discover (forespørsel); launcher.registerTestExecutionListeners (lytter); launcher.execute (forespørsel); } 

4.4. Test utdata

I hoved() metode kaller vi klassen vår, og vi bruker også lytteren til å få resultatdetaljene. Denne gangen lagres resultatet som en TestExecutionSummary.

Den enkleste måten å hente ut informasjonen sin på er å skrive ut til en konsollutgangsstrøm:

public static void main (String [] args) {RunJUnit5TestsFromJava runner = new RunJUnit5TestsFromJava (); runner.runAll (); TestExecutionSummary-sammendrag = runner.listener.getSummary (); summary.printTo (ny PrintWriter (System.out)); }

Dette vil gi oss detaljene i testkjøringen:

Testkjøring ferdig etter 177 ms [7 containere funnet] [0 containere hoppet over] [7 containere startet] [0 containere avbrutt] [7 containere vellykket] [0 containere mislyktes] [10 tester funnet] [0 tester hoppet over] [10 tester startet ] [0 tester avbrutt] [10 tester vellykket] [0 tester mislyktes]

5. Konklusjon

I denne artikkelen har vi vist hvordan du kjører JUnit-tester programmatisk fra Java-kode, som dekker JUnit 4, så vel som den nylige JUnit 5-versjonen av dette testrammeverket.

Som alltid er implementeringen av eksemplene vist her tilgjengelig på GitHub for både JUnit 5-eksemplene og JUnit 4.


$config[zx-auto] not found$config[zx-overlay] not found