A JUnit tesztek futtatása programozottan, Java alkalmazásból

1. Áttekintés

Ebben az oktatóanyagban megmutatjuk hogyan futtathatja a JUnit teszteket közvetlenül Java kódból - vannak olyan esetek, amikor ez a lehetőség jól jön.

Ha Ön még nem ismeri a JUnit alkalmazást, vagy ha frissíteni szeretne az 5-ös verzióra, akkor ellenőrizze a témában található számos oktatóanyagot.

2. Maven-függőségek

Szükségünk lesz néhány alapvető függőségre a JUnit 4 és a JUnit 5 tesztek futtatásához:

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

A JUnit 4, a JUnit 5 és a JUnit Platform Launcher legújabb verziói megtalálhatók a Maven Central oldalon.

3. A JUnit 4 tesztek futtatása

3.1. Teszt forgatókönyv

Mind a 4., mind az 5. JUnit esetében felállítunk néhány „helyőrző” tesztosztályt, amelyek elegendőek lesznek példáink bemutatására:

public class FirstUnitTest {@Test public void whenThis_thenThat () {assertTrue (true); } @Test public void whenSomething_thenSomething () {assertTrue (true); } @Test public void whenSomethingElse_thenSomethingElse () {assertTrue (true); }}
public class SecondUnitTest {@Test public void whenSomething_thenSomething () {assertTrue (true); } @Test public void whensomethingElse_thenSomethingElse () {assertTrue (true); }}

A JUnit 4 használatakor tesztosztályokat hozunk létre összeadással @Teszt jelölés minden vizsgálati módszerhez.

Más hasznos megjegyzéseket is felvehetünk, például @Előtt vagy @Utána, de ez nem tartozik az oktatóanyag körébe.

3.2. Egyetlen tesztosztály lefuttatása

A JUnit tesztek futtatásához Java kódból használhatjuk a JUnitCore osztály (hozzáadásával TextListener osztály, a kimenet megjelenítésére szolgál System.out):

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

A konzolon egy nagyon egyszerű üzenetet látunk, amely a sikeres teszteket jelzi:

Egy tesztosztály lefuttatása: .. Idő: 0,019 OK (2 teszt)

3.3. Több tesztosztály futtatása

Ha akarjuk több tesztosztály megadásához A JUnit 4 segítségével ugyanazt a kódot használhatjuk, mint egyetlen osztály esetében, és egyszerűen hozzáadjuk a további osztályokat:

JUnitCore junit = új JUnitCore (); junit.addListener (új TextListener (System.out)); Eredmény eredménye = junit.run (FirstUnitTest.class, SecondUnitTest.class); resultReport (eredmény);

Vegye figyelembe, hogy az eredmény egy JUnit példányban van tárolva Eredmény osztály, amelyet egy egyszerű segédprogram módszerrel nyomtatunk ki:

public static void resultReport (Eredmény eredménye) {System.out.println ("Kész. Eredmény: Hibák:" + result.getFailureCount () + ". Figyelmen kívül hagyva:" + result.getIgnoreCount () + ". A tesztek futnak:" + eredmény .getRunCount () + ". Idő:" + result.getRunTime () + "ms."); } 

3.4. Tesztcsomag futtatása

Ha néhány tesztosztályt csoportosítanunk kell a futtatáshoz, létrehozhatunk egy TestSuite. Ez csak egy üres osztály, ahol az összes osztályt megadjuk a JUnit kommentárokkal:

@RunWith (Suite.class) @ Suite.SuiteClasses ({FirstUnitTest.class, SecondUnitTest.class}) nyilvános osztály MyTestSuite {}

A tesztek futtatásához ismét ugyanazt a kódot fogjuk használni, mint korábban:

JUnitCore junit = új JUnitCore (); junit.addListener (új TextListener (System.out)); Eredmény eredménye = junit.run (MyTestSuite.class); resultReport (eredmény);

3.5. Ismételt tesztek futtatása

A JUnit egyik érdekes tulajdonsága, hogy tudunk ismételje meg a teszteket a RepeatedTest. Ez valóban hasznos lehet, ha véletlenszerű értékeket tesztelünk, vagy a teljesítmény ellenőrzéséhez.

A következő példában futtatjuk a teszteket MergeListsTest ötször:

Teszt teszt = új JUnit4TestAdapter (FirstUnitTest.class); RepeatedTest repeatTest = új RepeatedTest (teszt, 5); JUnitCore junit = új JUnitCore (); junit.addListener (új TextListener (System.out)); junit.run (ismételt teszt);

Itt használjuk JUnit4TestAdapter mint tesztelő osztályunk burkolója.

Akár programcsomagokat is létrehozhatunk, ismételt teszteléssel:

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

4. A JUnit 5 tesztek futtatása

4.1. Teszt forgatókönyv

Az 5. JUnit használatával ugyanazokat a teszt tesztosztályokat fogjuk használni, mint az előző bemutató esetében - FirstUnitTest és SecondUnitTest, némi kisebb különbséggel a JUnit keretrendszer más verziója miatt, például a @Teszt és állítási módszerek.

4.2. Egy teszt osztály futása

A JUnit 5 tesztek Java kódból történő futtatásához beállítunk egy példányt LauncherDiscoveryRequest. Olyan építő osztályt használ, ahol csomagválasztókat és osztálynév-szűrőket kell beállítanunk az összes futtatni kívánt tesztosztály megszerzéséhez.

Ez a kérés ezután társul egy indítóhoz, és a tesztek végrehajtása előtt felállítunk egy teszttervet és egy végrehajtási figyelőt is.

Mindkettő információt nyújt az elvégzendő tesztekről és az eredményekről:

public class RunJUnit5TestsFromJava {SummaryGeneratingListener listener = new SummaryGeneratingListener (); public void runOne () {LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request () .selectors (selectClass (FirstUnitTest.class)) .build (); Indítóindító = LauncherFactory.create (); TestPlan testPlan = launcher.discover (kérés); launcher.registerTestExecutionListeners (hallgató); launcher.execute (kérés); } // fő módszer ...}

4.3. Több tesztosztály futtatása

A választókat és a szűrőket beállíthatjuk arra a kérésre, hogy több tesztosztályt futtassunk.

Nézzük meg, hogyan állíthatjuk be a csomagválasztókat és tesztelhetjük az osztálynév-szűrőket, hogy megszerezzük az összes futtatni kívánt tesztosztályt:

public void runAll () {LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request () .selectors (selectPackage ("com.baeldung.junit5.runfromjava")) .filters (includeClassNamePatterns (". * Test")) .build (); Indítóindító = LauncherFactory.create (); TestPlan testPlan = launcher.discover (kérés); launcher.registerTestExecutionListeners (hallgató); launcher.execute (kérés); } 

4.4. Teszt kimenet

Ban,-ben fő() módszerrel hívjuk az osztályunkat, és a hallgatót is felhasználjuk az eredmény részleteinek megszerzéséhez. Az eredmény ezúttal a TestExecutionSummary.

Az információk legegyszerűbb kivonatolása csupán az, ha a konzol kimeneti adatfolyamába nyomtat:

public static void main (String [] args) {RunJUnit5TestsFromJava runner = új RunJUnit5TestsFromJava (); runner.runAll (); TestExecutionSummary összefoglaló = runner.listener.getSummary (); summary.printTo (új PrintWriter (System.out)); }

Ez megadja nekünk a tesztfuttatás részleteit:

A tesztfutás befejeződött 177 ms után [7 konténer található] [0 konténer kihagyva] [7 konténer indult] [0 konténer megszakítva] [7 konténer sikeres] [0 tároló sikertelen] [10 teszt talált] [0 teszt kihagyva] [10 teszt indult ] [0 teszt megszakítva] [10 teszt sikeres] [0 teszt sikertelen]

5. Következtetés

Ebben a cikkben bemutattuk, hogyan lehet a JUnit teszteket programszerűen futtatni Java-kódból, lefedve a JUnit 4-et, valamint a tesztelési keretrendszer legújabb JUnit 5-es verzióját.

Mint mindig, az itt bemutatott példák megvalósítása elérhető a GitHubon, mind a JUnit 5, mind a JUnit 4 példákhoz.