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.