Integrációs tesztelés Maven-nel

1. Áttekintés

A Maven a legnépszerűbb buildeszköz a Java térben, míg az integrációs tesztelés a fejlesztési folyamat elengedhetetlen része. Ebből kifolyólag, természetes választás az integrációs tesztek konfigurálása és végrehajtása a Maven segítségével.

Ebben az oktatóanyagban áttekintjük a Maven integrációs tesztelésére és az integrációs tesztek és az egységek tesztjeiről való különválasztásának különböző módjait.

2. Előkészítés

Ahhoz, hogy a bemutató kód közel legyen egy valós projekthez, létrehozunk egy JAX-RS alkalmazást. Az alkalmazást az integrációs tesztek végrehajtása előtt telepítik egy kiszolgálóra, és ezt követően szétszerelik.

2.1. Maven konfiguráció

Jersey körül építjük a REST alkalmazást - a JAX-RS referencia megvalósítását. Ehhez a megvalósításhoz néhány függőség szükséges:

 org.glassfish.jersey.containers jersey-container-servlet-core 2.27 org.glassfish.jersey.inject jersey-hk2 2.27 

Ezen függőségek legújabb verzióit itt és itt találjuk.

A Jetty Maven beépülő modult használjuk a tesztelési környezet beállításához. Ez a plugin elindítja a Jetty szervert a integráció előtti teszt szakaszában, majd leállítja azt a integráció utáni teszt fázis.

Így konfigurálhatjuk a Jetty Maven plugint pom.xml:

 org.eclipse.jetty móló-maven-plugin 9.4.11.v20180605 8999 kilép 9000 start-móló integráció előtti teszt start stop móló integráció utáni teszt stop 

Amikor a Jetty kiszolgáló elindul, a porton hallgat 8999. A stopKey és stopPort A konfigurációs elemeket kizárólag a pluginok használják álljon meg a cél és értékük a mi szempontunkból nem fontos.

Itt találhatja meg a Jetty Maven plugin legújabb verzióját.

Egy másik dolog, amit észre kell venni, hogy meg kell adnunk a csomagolás elem a pom.xml fájlba háború, különben a Jetty plugin nem tudja elindítani a szervert:

háború

2.2. REST alkalmazás létrehozása

Az alkalmazás végpontja nagyon egyszerű - üdvözlő üzenet küldése, amikor egy GET kérés eléri a kontextus gyökerét:

@Path ("/") public class RestEndpoint {@GET public String hello () {return "Üdvözöljük a Baeldungban!"; }}

Így regisztráljuk a végpont osztályt Jersey-nél:

com.baeldung.maven.it csomag; import org.glassfish.jersey.server.ResourceConfig; a public class EndpointConfig kiterjeszti a ResourceConfig {public EndpointConfig () {register (RestEndpoint.class); }}

Ahhoz, hogy a Jetty szerver tudatában legyen a REST alkalmazásunknak, használhatunk egy klasszikust web.xml telepítési leíró:

  rest-servlet org.glassfish.jersey.servlet.ServletContainer javax.ws.rs.Application com.baeldung.maven.it.EndpointConfig rest-servlet / * 

Ezt a leírót a könyvtárba kell helyezni / src / main / webapp/ WEB-INF hogy a szerver felismerje.

2.3. Ügyféloldali tesztkód

A következő szakaszok összes tesztosztálya egyetlen módszert tartalmaz:

@Test public void whenSendingGet_thenMessageIsReturned () IOException dobja {String url = "// localhost: 8999"; URLConnection kapcsolat = új URL (url) .openConnection (); próbáld (InputStream válasz = connection.getInputStream (); Szkenner szkenner = új Szkenner (válasz)) {String responseBody = szkenner.nextLine (); assertEquals ("Üdvözöljük a Baeldungban!", responseBody); }}

Mint láthatjuk, ez a módszer nem tesz mást, mint egy GET kérést küld az általunk korábban beállított webalkalmazásnak, és ellenőrzi a választ.

3. Integrációs tesztelés működés közben

Az integrációs tesztelés során fontos megjegyezni, hogy a vizsgálati módszerek futtatása gyakran elég hosszú ideig tart.

Ennek eredményeként ki kell zárnunk az integrációs teszteket az alapértelmezett összeállítási életciklusból, megakadályozva, hogy minden egyes projekt felépítése során lelassítsák az egész folyamatot.

Az integrációs tesztek elkülönítésének kényelmes módja a buildprofilok használata. Ez a fajta konfiguráció lehetővé teszi számunkra, hogy csak szükség esetén hajtsunk végre integrációs teszteket - megfelelő profil megadásával.

A következő szakaszokban minden integrációs tesztet konfigurálunk buildprofilokkal.

4. Tesztelés a Failsafe beépülő modullal

Az integrációs tesztek futtatásának legegyszerűbb módja a Maven használata üzembiztos csatlakoztat.

Alapértelmezés szerint a Maven holtbiztos plugin egység teszteket hajt végre a teszt fázis, míg a üzembiztos A plugin integrációs teszteket futtat a integrációs teszt fázis.

Különböző mintájú tesztosztályokat nevezhetünk meg azokhoz a beépülő modulokhoz, hogy külön vegyék fel a mellékelt teszteket.

Az alapértelmezett elnevezési egyezmények által holtbiztos és üzembiztos különböznek, ezért csak be kell tartanunk ezeket a konvenciókat az egység- és integrációs tesztek elkülönítésére.

A. Végrehajtása holtbiztos A plugin minden olyan osztályt tartalmaz, amelynek neve kezdődik Teszt, vagy azzal végződik Teszt, Tesztek vagy Próbaper. Ezzel szemben a üzembiztos a plugin teszt módszereket hajt végre azokban az osztályokban, amelyek neve kezdődik AZT, vagy azzal végződik AZT vagy ITCase.

Itt találhatjuk a tesztek felvételével kapcsolatos dokumentációt holtbiztos, és itt van az üzembiztos.

Tegyük hozzá a üzembiztos plugin a POM-hoz alapértelmezett konfigurációval:

 failsafe maven-failsafe-plugin 2.22.0 integrációs teszt ellenőrzése 

Ezen a linken találhatja meg a üzembiztos csatlakoztat.

A fenti konfigurációval a következő vizsgálati módszer kerül végrehajtásra a integrációs teszt fázis:

public class RestIT {// a 2.3. alfejezetben bemutatott vizsgálati módszer}

Mivel a Jetty szerver elindul a integráció előtti teszt fázis és leáll integráció utáni teszt, az imént látott teszt ezzel a paranccsal teljesül:

mvn ellenőrizze -Pfailsafe

Testreszabhatjuk az elnevezési mintákat úgy is, hogy különböző névvel rendelkező osztályok szerepeljenek benne:

 maven-failsafe-plugin 2.22.0 ** / * RestIT ** / RestITCase ... 

5. Tesztelés a Surefire bővítménnyel

Eltekintve a üzembiztos csatlakoztat, használhatjuk a holtbiztos beépülő modul az egység- és integrációs tesztek különböző fázisokban történő végrehajtására.

Tegyük fel, hogy az összes integrációs tesztet utótaggal akarjuk megnevezni IntegrationTest. Mivel a holtbiztos A plugin ilyen névvel futtat teszteket a teszt fázis alapértelmezés szerint ki kell zárnunk őket az alapértelmezett végrehajtásból:

 maven-surefire-plugin 2.22.0 ** / * IntegrationTest 

A bővítmény legújabb verziója itt van.

Minden teszt osztályt végeztünk, amelynek neve végződött IntegrationTest ki az építési életciklusból. Itt az ideje visszatenni őket egy profillal:

 surefire maven-surefire-plugin 2.22.0 integrációs teszt teszt nincs ** / * IntegrationTest 

Ahelyett, hogy megkötné a teszt célja a holtbiztos bővítmény a teszt építési fázis, mint általában, a integrációs teszt fázis. Ezután a beépülő modul beindul az integrációs tesztelés során.

Figyelje meg, hogy be kell állítanunk egy kizárni elem a egyik sem hogy felülbírálja az alapkonfigurációban megadott kizárást.

Most határozzunk meg egy integrációs tesztosztályt a névadási mintánkkal:

public class RestIntegrationTest {// a 2.3. alfejezetben bemutatott tesztmódszer}

Ez a teszt a következő paranccsal fog futni:

mvn verify -Psurefire

6. Tesztelés a rakomány beépülő modullal

Használhatjuk a holtbiztos plugin a Maven-mel szállítmány csatlakoztat. Ez a bővítmény beépített támogatással rendelkezik a beágyazott szerverekhez, amelyek nagyon hasznosak az integrációs teszteléshez.

További részletek erről a kombinációról itt találhatók.

7. Tesztelés a JUnit-szal @Kategória

A tesztek szelektív végrehajtásának kényelmes módja a @Kategória annotáció a JUnit 4 keretrendszerében. Ez a megjegyzés lehetővé teszi, hogy kizárjunk bizonyos teszteket az egységtesztekből, és beépítsük őket az integrációs tesztekbe.

Először is szükségünk van egy felületre vagy osztályra, hogy kategóriaazonosítóként működjön:

com.baeldung.maven.it csomag; nyilvános felület integrálása {}

Ezután egy tesztórát díszíthetünk a @Kategória annotáció és Integráció azonosító:

@Category (Integration.class) public class RestJUnitTest {// a 2.3. Alfejezetben bemutatott vizsgálati módszer}

Ahelyett, hogy kijelentené a @Kategória egy tesztosztályra vonatkozó feljegyzés, a módszer szintjén is felhasználhatjuk az egyes vizsgálati módszerek kategorizálására.

Kategória kizárása a teszt az építési fázis egyszerű:

 maven-surefire-plugin 2.22.0 com.baeldung.maven.it.Integráció 

Beleértve a Integráció kategóriában integrációs teszt fázis szintén egyszerű:

 kategória maven-failsafe-plugin 2.22.0 ** / * com.baeldung.maven.it.Integrációs integrációs teszt 

Most integrációs teszteket futtathatunk egy Maven paranccsal:

mvn verify -Pcategory

8. Külön könyvtár hozzáadása az integrációs tesztekhez

Időnként kívánatos, hogy legyen egy külön könyvtár az integrációs tesztekhez. A tesztek ilyen módon történő szervezése lehetővé teszi számunkra, hogy teljes mértékben elkülönítsük az integrációs teszteket az egység tesztektől.

Használhatjuk a Maven-t építeni segítőt plugin erre a célra:

 org.codehaus.mojo build-helper-maven-plugin 3.0.0 add-integráció-teszt-forrás generál-teszt-források add-teszt-forrás src / integráció-teszt / java 

Itt találhatjuk meg a bővítmény legújabb verzióját.

Az imént látott konfiguráció egy tesztforrás könyvtárat ad hozzá a buildhez. Adjunk hozzá osztálydefiníciót az új könyvtárhoz:

public class RestITCase {// a 2.3. alfejezetben bemutatott vizsgálati módszer}

Itt az ideje futtatni az integrációs teszteket ebben az osztályban:

mvn ellenőrizze -Pfailsafe

A Maven üzembiztos A plugin a 3.1. alfejezetben beállított konfiguráció miatt végrehajtja a módszereket ebben a tesztosztályban.

A tesztforrás könyvtár gyakran együtt jár egy erőforrás könyvtárral. Ilyen könyvtárat felvehetünk egy másikba végrehajtás elem a plugin konfigurációjához:

 ... add-integráció-teszt-erőforrás létrehoz-teszt-erőforrások add-teszt-erőforrás src / integráció-teszt / források 

9. Következtetés

Ez a cikk áttekintette a Maven használatát integrációs tesztek futtatásához egy Jetty kiszolgálóval, a Maven konfigurációjára összpontosítva holtbiztos és üzembiztos bővítmények.

Az oktatóanyag teljes forráskódja megtalálható a GitHub oldalon.