Testovanie integrácie s Maven

1. Prehľad

Maven je najpopulárnejším nástrojom na zostavenie v prostredí Java, zatiaľ čo testovanie integrácie je nevyhnutnou súčasťou vývojového procesu. Preto je prirodzenou voľbou konfigurovať a vykonávať integračné testy s Maven.

V tomto výučbe si ukážeme niekoľko rôznych spôsobov, ako použiť Maven na testovanie integrácie a ako oddeliť testy integrácie od testov jednotiek.

2. Príprava

Aby sa demonštračný kód priblížil k projektu v reálnom svete, nastavíme aplikáciu JAX-RS. Táto aplikácia je nasadená na server pred vykonaním integračných testov a následne demontovaná.

2.1. Konfigurácia Maven

Našu REST aplikáciu postavíme okolo Jersey - referenčnej implementácie JAX-RS. Táto implementácia vyžaduje niekoľko závislostí:

 org.glassfish.jersey.containers dres-kontajner-servlet-jadro 2,27 org.glassfish.jersey.inject dres-hk2 2,27 

Najnovšie verzie týchto závislostí nájdeme tu a tu.

Na nastavenie testovacieho prostredia použijeme doplnok Jetty Maven. Tento doplnok spúšťa server Jetty počas predintegračný test fázy Mavenovho životného cyklu, potom ho zastaví v post-integračný test fáza.

Tu je postup, ako nakonfigurujeme doplnok Jetty Maven pom.xml:

 org.eclipse.jetty jetty-maven-plugin 9.4.11.v20180605 8999 ukončiť 9000 štart-mólo predbežná integrácia-test štart stop-mólo post-integračný-test stop 

Keď sa Jetty server spustí, bude to počúvať na porte 8999. The stopKey a stopPort konfiguračné prvky používajú výlučne doplnky zastav cieľ a ich hodnota nie je z nášho pohľadu dôležitá.

Tu nájdete najnovšiu verziu doplnku Jetty Maven.

Ďalšia vec, ktorú si musíme všimnúť, je, že musíme nastaviť balenie prvok v pom.xml podať do vojna, inak doplnok Jetty nemôže spustiť server:

vojna

2.2. Vytvorenie aplikácie REST

Koncový bod aplikácie je veľmi jednoduchý - vrátenie uvítacej správy, keď požiadavka GET zasiahne koreň kontextu:

@Path ("/") verejná trieda RestEndpoint {@GET public String ahoj () {návrat "Vitajte v Baeldungu!"; }}

Takto zaregistrujeme triedu koncového bodu v Jersey:

balík com.baeldung.maven.it; import org.glassfish.jersey.server.ResourceConfig; verejná trieda EndpointConfig rozširuje ResourceConfig {public EndpointConfig () {register (RestEndpoint.class); }}

Aby sme server Jetty informovali o našej aplikácii REST, môžeme použiť klasiku web.xml deskriptor nasadenia:

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

Tento deskriptor musí byť umiestnený v adresári / src / main / webapp/ WEB-INF server rozpozná.

2.3. Testovací kód na strane klienta

Všetky testovacie triedy v nasledujúcich častiach obsahujú jednu metódu:

@ Test public void whenSendingGet_thenMessageIsReturned () vyvolá IOException {String url = "// localhost: 8999"; URLConnection connection = nová URL (url) .openConnection (); try (InputStream response = connection.getInputStream (); Scanner scanner = new Scanner (response)) {String responseBody = scanner.nextLine (); assertEquals ("Vitajte v Baeldungu!", responseBody); }}

Ako vidíme, táto metóda nerobí nič iné ako odoslanie žiadosti GET do webovej aplikácie, ktorú sme nastavili pred, a overenie odpovede.

3. Testovanie integrácie v akcii

Je dôležité si všimnúť, že pri integračnom testovaní je to testovacie metódy často trvá dosť dlho.

Vo výsledku by sme mali vylúčiť integračné testy z predvoleného životného cyklu zostavenia, aby sme zabránili spomaleniu celého procesu pri každej tvorbe projektu.

Pohodlným spôsobom na oddelenie integračných testov je použitie profilov zostavenia. Tento druh konfigurácie nám umožňuje vykonávať integračné testy iba v prípade potreby - zadaním vhodného profilu.

V nasledujúcich častiach nakonfigurujeme všetky integračné testy s profilmi zostavenia.

4. Testovanie pomocou doplnku Failsafe

Najjednoduchší spôsob spustenia integračných testov je použitie Mavenu bezpečné zapojiť.

Predvolene Maven istý oheň plugin vykonáva jednotkové testy počas test fázy, zatiaľ čo the bezpečné Plugin spúšťa integračné testy v systéme Windows integračný test fáza.

Pre tieto doplnky môžeme pomenovať testovacie triedy s rôznymi vzormi, aby sme priložené testy vyzdvihli osobitne.

Predvolené konvencie pomenovania vynútené istý oheň a bezpečné sa líšia, takže pri oddelení testov jednotiek a integrácie stačí postupovať podľa týchto konvencií.

Poprava istý oheň plugin obsahuje všetky triedy, ktorých názov začína Test, alebo končí Test, Skúšky alebo Testovacia situácia. Naproti tomu bezpečné plugin vykonáva testovacie metódy v triedach, ktorých názov začína IT, alebo končí IT alebo ITCase.

Na tomto mieste nájdeme dokumentáciu týkajúcu sa zahrnutia testu pre istý oheň, a tu je ten pre bezpečné.

Pridajme bezpečné doplnok k POM s predvolenou konfiguráciou:

 FailSafe Maven-FailSafe-Plugin 2.22.0 Integration-Test Overte 

Na tomto odkaze nájdete najnovšiu verziu servera bezpečné zapojiť.

S vyššie uvedenou konfiguráciou sa v teste vykoná nasledujúca skúšobná metóda integračný test fáza:

verejná trieda RestIT {// testovacia metóda uvedená v pododdiele 2.3}

Od spustenia servera Jetty v serveri predintegračný test fáza a vypne sa post-integračný test, test, ktorý sme práve videli, prechádza týmto príkazom:

mvn overiť -Pfailsafe

Môžeme tiež prispôsobiť pomenovacie vzory tak, aby zahŕňali triedy s rôznymi názvami:

 maven-FailSafe-Plugin 2.22.0 ** / * RestIT ** / RestITCase ... 

5. Testovanie pomocou doplnku Surefire

Okrem bezpečné zapojiť, môžeme tiež použiť istý oheň plugin na vykonávanie testov jednotky a integrácie v rôznych fázach.

Predpokladajme, že chceme pomenovať všetky integračné testy pomocou prípony IntegrationTest. Keďže istý oheň Plugin spúšťa testy s takýmto názvom v priečinku test fázy ich predvolene musíme vylúčiť z predvoleného vykonania:

 maven-surefire-plugin 2.22.0 ** / * IntegrationTest 

Najnovšia verzia tohto doplnku je tu.

Zúčastnili sme sa všetkých testovacích tried s menom končiacim na IntegrationTest mimo životného cyklu zostavenia. Je čas dať ich späť s profilom:

 surefire maven-surefire-plugin 2.22.0 test integrácie-test žiadny ** / * IntegrationTest 

Namiesto viazania test cieľ istý oheň doplnok k test fázy budovania, ako obvykle, viazali sme to na integračný test fáza. Doplnok sa potom naštartuje počas procesu testovania integrácie.

Všimnite si, že musíme nastaviť vylúčiť prvok do žiadny prepísať vylúčenie zadané v základnej konfigurácii.

Teraz definujme triedu integračného testu s našim vzorom pomenovania:

verejná trieda RestIntegrationTest {// testovacia metóda uvedená v pododdiele 2.3}

Tento test bude prebiehať s príkazom:

mvn verifikovať - ​​istý oheň

6. Testovanie s doplnkom nákladu

Môžeme použiť istý oheň doplnok s Maven náklad zapojiť. Tento doplnok má zabudovanú podporu pre zabudované servery, ktoré sú veľmi užitočné pri testovaní integrácie.

Viac podrobností o tejto kombinácii nájdete tu.

7. Testovanie pomocou JUnit @Category

Pohodlným spôsobom na selektívne vykonávanie testov je využitie @Kategória anotácia v rámci JUnit 4. Táto anotácia nám umožňuje vylúčiť konkrétne testy z testovania jednotiek a zahrnúť ich do integračného testovania.

Najprv potrebujeme rozhranie alebo triedu, ktorá bude fungovať ako identifikátor kategórie:

balík com.baeldung.maven.it; integrácia verejného rozhrania {}

Potom môžeme ozdobiť testovaciu triedu znakom @Category anotácia a Integrácia identifikátor:

@Category (Integration.class) verejná trieda RestJUnitTest {// testovacia metóda uvedená v podsekcii 2.3}

Namiesto vyhlásenia @Category anotáciu k testovacej triede, môžeme ju tiež použiť na úrovni metódy na kategorizáciu jednotlivých testovacích metód.

Vylúčenie kategórie z test fáza budovania je jednoduchá:

 maven-surefire-plugin 2.22.0 com.baeldung.maven.it. Integrácia 

Vrátane Integrácia kategórii v integračný test fáza je tiež priama:

 kategória maven-failafe-plugin 2.22.0 ** / * com.baeldung.maven.it. Integračný test integrácie overiť 

Teraz môžeme spustiť integračné testy pomocou príkazu Maven:

mvn overiť -kategóriu

8. Pridanie samostatného adresára pre integračné testy

Niekedy je žiaduce mať samostatný adresár pre integračné testy. Organizácia testov týmto spôsobom nám umožňuje úplne izolovať integračné testy od jednotkových testov.

Môžeme použiť Maven stavať pomocníka doplnok na tento účel:

 org.codehaus.mojo build-helper-maven-plugin 3.0.0 add-integration-test-source generate-test-sources add-test-source src / integration-test / java 

Tu nájdeme najnovšiu verziu tohto doplnku.

Konfigurácia, ktorú sme práve videli, pridáva do zostavenia testovací zdrojový adresár. Pridajte do tohto nového adresára definíciu triedy:

verejná trieda RestITCase {// testovacia metóda uvedená v pododdiele 2.3}

Je čas vykonať integračné testy v tejto triede:

mvn overiť -Pfailsafe

The Maven bezpečné plugin vykoná metódy v tejto testovacej triede kvôli konfigurácii, ktorú sme nastavili v pododdiele 3.1.

Testovací zdrojový adresár sa často spája s adresárom zdrojov. Takýto adresár môžeme pridať do iného exekúcia element do konfigurácie pluginu:

 ... add-integration-test-resource generate-test-resources add-test-resource src / integration-test / resources 

9. Záver

Tento článok prešiel používaním Mavenu na vykonávanie integračných testov so serverom Jetty so zameraním na konfiguráciu Mavenu istý oheň a bezpečné doplnky.

Kompletný zdrojový kód tohto tutoriálu nájdete na GitHub.


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