Kørsel af JUnit Tests Programmatisk fra et Java-program

1. Oversigt

I denne vejledning viser vi det hvordan man kører JUnit-tests direkte fra Java-kode - der er scenarier, hvor denne mulighed er praktisk.

Hvis du er ny hos JUnit, eller hvis du vil opgradere til JUnit 5, kan du tjekke nogle af mange tutorials, vi har om emnet.

2. Maven-afhængigheder

Vi har brug for et par grundlæggende afhængigheder for at køre både JUnit 4 og JUnit 5 tests:

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

De nyeste versioner af JUnit 4, JUnit 5 og JUnit Platform Launcher kan findes på Maven Central.

3. Kørsel af JUnit 4-test

3.1. Testscenarie

For både JUnit 4 og JUnit 5 opretter vi et par "pladsholder" testklasser, som vil være nok til at demonstrere vores eksempler:

public class FirstUnitTest {@Test public void whenThis_thenThat () {assertTrue (true); } @Test offentlig ugyldigt 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 offentligt ugyldigt whensomethingElse_thenSomethingElse () {assertTrue (true); }}

Når vi bruger JUnit 4, opretter vi testklasser, der tilføjes @Prøve kommentar til hver testmetode.

Vi kan også tilføje andre nyttige kommentarer, f.eks @Før eller @Efter, men det er ikke inden for denne tutorial.

3.2. Kører en enkelt testklasse

For at køre JUnit-tests fra Java-kode kan vi bruge JUnitCore klasse (med tilføjelse af TextListener klasse, bruges til at vise output i System.out):

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

På konsollen ser vi en meget enkel besked, der angiver vellykkede tests:

Kører en testklasse: .. Tid: 0,019 OK (2 tests)

3.3. Kører flere testklasser

Hvis vi vil for at specificere flere testklasser med JUnit 4 kan vi bruge den samme kode som for en enkelt klasse og blot tilføje de ekstra klasser:

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

Bemærk, at resultatet er gemt i en forekomst af JUnit's Resultat klasse, som vi udskriver ved hjælp af en simpel hjælpemetode:

offentligt statisk ugyldigt resultatReport (resultatresultat) {System.out.println ("Færdig. Resultat: Fejl:" + resultat.getFailureCount () + ". Ignoreret:" + resultat.getIgnoreCount () + ". Testkørsel:" + resultat .getRunCount () + ". Tid:" + resultat.getRunTime () + "ms."); } 

3.4. Kører en testsuite

Hvis vi har brug for at gruppere nogle testklasser for at køre dem, kan vi oprette en TestSuite. Dette er bare en tom klasse, hvor vi angiver alle klasser ved hjælp af JUnit-kommentarer:

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

For at køre disse tests bruger vi igen den 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. Kører gentagne tests

Et af de interessante træk ved JUnit er, at vi kan gentag test ved at oprette forekomster af Gentaget test. Dette kan være virkelig nyttigt, når vi tester tilfældige værdier eller til præstationskontrol.

I det næste eksempel kører vi testene fra MergeListsTest fem gange:

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

Her bruger vi JUnit4TestAdapter som en indpakning til vores testklasse.

Vi kan endda oprette suiter programmatisk ved at anvende gentagne test:

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. Kørsel af JUnit 5-test

4.1. Testscenarie

Med JUnit 5 bruger vi de samme eksempeltestklasser som for den tidligere demo - FirstUnitTest og SecondUnitTest, med nogle mindre forskelle på grund af en anden version af JUnit framework, som pakken til @Prøve og påstandsmetoder.

4.2. Kører en enkelt testklasse

For at køre JUnit 5-tests fra Java-kode opretter vi en forekomst af LauncherDiscoveryRequest. Det bruger en builder-klasse, hvor vi skal indstille pakkevælgerne og teste klassens navnefiltre for at få alle testklasser, som vi vil køre.

Denne anmodning knyttes derefter til en launcher, og inden testene udføres, opretter vi også en testplan og en eksekveringslytter.

Begge disse giver information om de tests, der skal udføres, og om resultaterne:

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 (anmodning); launcher.registerTestExecutionListeners (lytter); launcher.execute (anmodning); } // hovedmetode ...}

4.3. Kører flere testklasser

Vi kan indstille vælgere og filtre til anmodningen om at køre flere testklasser.

Lad os se, hvordan vi kan indstille pakkevælgerne og teste klassens navnefiltre for at få alle testklasser, som vi vil køre:

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

4.4. Test output

I hoved () metode kalder vi vores klasse, og vi bruger også lytteren til at få resultatoplysningerne. Denne gang gemmes resultatet som en TestExecutionSummary.

Den enkleste måde at udtrække sin info på er ved at udskrive til en konsoludgangsstrøm:

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

Dette giver os detaljerne i vores testkørsel:

Testkørsel afsluttet efter 177 ms [7 containere fundet] [0 containere sprunget over] [7 containere startet] [0 containere afbrudt] [7 containere lykkedes] [0 containere mislykkedes] [10 test fundet] [0 test sprunget over] [10 test startede ] [0 tests afbrudt] [10 tests blev gennemført] [0 tests mislykkedes]

5. Konklusion

I denne artikel har vi vist, hvordan man kører JUnit-test programmatisk fra Java-kode, der dækker JUnit 4 samt den nylige JUnit 5-version af denne testramme.

Som altid er implementeringen af ​​eksemplerne vist her tilgængelig på GitHub til både JUnit 5-eksemplerne såvel som JUnit 4.


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