Testiranje integracije s Mavenom

1. Pregled

Maven je najpopularniji alat za izgradnju u Java prostoru, dok je integracijsko testiranje bitan dio razvojnog procesa. Stoga, prirodan je izbor konfiguriranja i izvršavanja integracijskih testova s ​​Mavenom.

U ovom uputstvu proučit ćemo nekoliko različitih načina upotrebe Mavena za integracijsko testiranje i odvajanje integracijskih testova od jediničnih testova.

2. Priprema

Kako bismo demonstracijski kod približili projektu iz stvarnog svijeta, postavićemo aplikaciju JAX-RS. Ova se aplikacija postavlja na poslužitelj prije izvođenja integracijskih testova i nakon toga rastavlja.

2.1. Maven konfiguracija

Izgradit ćemo našu REST aplikaciju oko Jerseyja - referentnu implementaciju JAX-RS. Ova implementacija zahtijeva nekoliko ovisnosti:

 org.glassfish.jersey.kontejneri dres-kontejner-servlet-core 2.27 org.glassfish.jersey.injekt dres-hk2 2.27 

Najnovije verzije ovih ovisnosti možemo pronaći ovdje i ovdje.

Upotrijebit ćemo dodatak Jetty Maven za postavljanje testnog okruženja. Ovaj dodatak pokreće Jetty poslužitelj tijekom test prije integracije fazi Maven životnog ciklusa gradnje, a zatim ga zaustavlja u test nakon integracije faza.

Evo kako konfiguriramo dodatak Jetty Maven pom.xml:

 org.eclipse.jetty jetty-maven-plugin 9.4.11.v20180605 8999 quit 9000 start-jetty pred-integracija-test start stop-jetty post-integracija-test stop 

Kada se Jetty poslužitelj pokrene, preslušat će na priključku 8999. The stopKljuče i stopPort konfiguracijske elemente koriste isključivo dodaci Stop cilj i njihova vrijednost nisu važni iz naše perspektive.

Ovdje možete pronaći najnoviju verziju dodatka Jetty Maven.

Još jedna stvar koju treba primijetiti jest da moramo postaviti ambalaža element u pom.xml podnijeti na rat, inače dodatak Jetty ne može pokrenuti poslužitelj:

rat

2.2. Izrada REST aplikacije

Krajnja točka aplikacije vrlo je jednostavna - vraćanje dobrodošlice kada GET zahtjev pogodi korijen konteksta:

@Path ("/") javna klasa RestEndpoint {@GET public String hello () {return "Dobrodošli u Baeldung!"; }}

Evo kako registriramo klasu krajnjih točaka kod Jerseyja:

paket com.baeldung.maven.it; import org.glassfish.jersey.server.ResourceConfig; javna klasa EndpointConfig proširuje ResourceConfig {public EndpointConfig () {register (RestEndpoint.class); }}

Da bi poslužitelj Jetty bio svjestan naše aplikacije REST, možemo koristiti klasični web.xml deskriptor implementacije:

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

Ovaj deskriptor mora biti smješten u direktorij / src / main / webapp/ WEB-INF da bi ih poslužitelj prepoznao.

2.3. Kôd za testiranje na strani klijenta

Sve ispitne klase u sljedećim odjeljcima sadrže jednu metodu:

@Test public void whenSendingGet_thenMessageIsReturned () baca IOException {String url = "// localhost: 8999"; URLConnection veza = novi URL (url) .openConnection (); probajte (InputStream response = connection.getInputStream (); Scanner scanner = novi Scanner (response)) {String responseBody = scanner.nextLine (); assertEquals ("Dobrodošli u Baeldung!", responseBody); }}

Kao što vidimo, ova metoda ne radi ništa osim slanja GET zahtjeva web aplikaciji koju smo prethodno postavili i provjere odgovora.

3. Integracijsko testiranje na djelu

Važno je primijetiti kod integracijskog testiranja to metode ispitivanja često traju prilično dugo.

Kao rezultat, trebali bismo izuzeti testove integracije iz zadanog životnog ciklusa gradnje, sprječavajući ih da usporavaju cijeli proces svaki put kad gradimo projekt.

Prikladan način za odvajanje integracijskih testova je upotreba profila gradnje. Ovakva konfiguracija omogućuje nam provođenje integracijskih testova samo kada je to potrebno - određivanjem prikladnog profila.

U sljedećim odjeljcima konfigurirat ćemo sve testove integracije s profilima gradnje.

4. Testiranje pomoću sigurnosnog dodatka

Najjednostavniji način izvođenja integracijskih testova je upotreba Mavena neispravan uključiti.

Prema zadanim postavkama Maven pouzdan dodatak izvršava jedinične testove tijekom test faza, dok the neispravan dodatak izvodi testove integracije u integracija-test faza.

Možemo imenovati klase ispitivanja s različitim uzorcima za te dodatke da zasebno pokupe priložene testove.

Zadane konvencije imenovanja koje provodi pouzdan i neispravan su različiti, stoga samo trebamo slijediti ove konvencije za razdvajanje jedinica i integracijskih testova.

Izvršenje pouzdan dodatak uključuje sve klase čije ime počinje s Test, ili završava s Test, Ispitivanja ili TestCase. Suprotno tome, neispravan dodatak izvršava metode ispitivanja u klasama čiji naziv počinje s TO, ili završava s TO ili ITCase.

Ovdje možemo pronaći dokumentaciju u vezi s uključivanjem testa za pouzdan, a ovdje je i onaj za neispravan.

Dodajmo i neispravan dodatak za POM sa zadanom konfiguracijom:

 failsafe maven-failsafe-plugin 2.22.0 provjera integracijskog testa 

Na ovoj poveznici možete pronaći najnoviju verziju neispravan uključiti.

S gornjom konfiguracijom, sljedeća će se metoda ispitivanja izvršiti u integracija-test faza:

javna klasa RestIT {// metoda ispitivanja prikazana u pododjeljku 2.3}

Budući da se Jetty poslužitelj pokreće u test prije integracije fazi i isključuje se test nakon integracije, test koji smo upravo vidjeli prolazi s ovom naredbom:

mvn provjeriti -Pfailsafe

Uzorke imenovanja također možemo prilagoditi tako da uključuju klase s različitim imenima:

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

5. Testiranje pomoću Surefire dodatka

Osim neispravan uključiti, možemo koristiti i pouzdan dodatak za izvršavanje jediničnih i integracijskih testova u različitim fazama.

Pretpostavimo da želimo sve integracijske testove imenovati sufiksom IntegrationTest. Budući da je pouzdan dodatak pokreće testove s takvim imenom u test faze prema zadanim postavkama, moramo ih izuzeti iz zadanog izvršavanja:

 maven-surefire-plugin 2.22.0 ** / * IntegrationTest 

Ovdje je najnovija verzija ovog dodatka.

Polagali smo sve ispitne satove koji su završavali imenom IntegrationTest izvan životnog ciklusa izrade. Vrijeme je da ih vratite s profilom:

 surefire maven-surefire-plugin 2.22.0 test integracijskog testa nema ** / * IntegrationTest 

Umjesto da veže test cilj pouzdan dodatak za test fazu gradnje, kao i obično, vezali smo je za integracija-test faza. Dodatak će se zatim pokrenuti tijekom postupka testiranja integracije.

Primijetite da moramo postaviti isključiti element za nijedna da nadjača izuzeće navedeno u osnovnoj konfiguraciji.

Sada, definirajmo klasu test integracije s našim uzorkom imenovanja:

javna klasa RestIntegrationTest {// metoda ispitivanja prikazana u pododjeljku 2.3}

Ovaj test će se izvoditi s naredbom:

mvn provjeri -Psurefire

6. Testiranje pomoću dodatka za teret

Možemo koristiti pouzdan dodatak uz Maven teret uključiti. Ovaj dodatak dolazi s ugrađenom podrškom za ugrađene poslužitelje, što je vrlo korisno za integracijsko testiranje.

Više detalja o ovoj kombinaciji možete pronaći ovdje.

7. Testiranje pomoću JUnit-a @Kategorija

Prikladan način selektivnog izvršavanja testova je korištenje @Kategorija napomena u okviru JUnit 4. Ova nam napomena omogućuje izuzeće određenih testova iz jediničnog testiranja i njihovo uključivanje u integracijsko testiranje.

Prvo, trebamo sučelje ili klasu da bi radili kao identifikator kategorije:

paket com.baeldung.maven.it; integracija javnog sučelja {}

Tada testni razred možemo ukrasiti znakom @Kategorija anotacija i Integracija identifikator:

@Category (Integration.class) javna klasa RestJUnitTest {// metoda ispitivanja prikazana u pododjeljku 2.3}

Umjesto da proglasi @Kategorija napomena na testnoj klasi, možemo je koristiti i na razini metode za kategorizaciju pojedinih metoda ispitivanja.

Izuzimanje kategorije iz test faza izrade je jednostavna:

 maven-surefire-plugin 2.22.0 com.baeldung.maven.it.Integracija 

Uključujući i Integracija kategorija u integracija-test faza je također izravna:

 kategorija maven-failsafe-plugin 2.22.0 ** / * com.baeldung.maven.it.Integriranje integracija-test provjera 

Sada možemo pokrenuti integracijske testove s naredbom Maven:

mvn provjeriti -Kategorija

8. Dodavanje zasebnog direktorija za integracijske testove

Povremeno je poželjno imati zaseban direktorij za integracijske testove. Ovakva organizacija testova omogućuje nam potpuno izoliranje integracijskih testova od jediničnih testova.

Možemo koristiti Maven pomoćnik u gradnji dodatak u tu svrhu:

 org.codehaus.mojo build-helper-maven-plugin 3.0.0 add-integracija-test-izvor generiraj-test-izvori add-test-source src / integracija-test / java 

Ovdje možemo pronaći najnoviju verziju ovog dodatka.

Konfiguracija koju smo upravo vidjeli dodaje gradnji direktorij ispitnog izvora. Dodajmo definiciju klase u taj novi direktorij:

javna klasa RestITCase {// metoda ispitivanja prikazana u pododjeljku 2.3}

Vrijeme je da pokrenete integracijske testove u ovoj klasi:

mvn provjeriti -Pfailsafe

Maven neispravan dodatak će izvršavati metode u ovoj testnoj klasi zbog konfiguracije koju smo postavili u pododjeljku 3.1.

Izvorni direktorij za testiranje često ide uz direktorij resursa. Takav direktorij možemo dodati u drugi izvršenje element u konfiguraciji dodatka:

 ... add-integracija-test-resurs generiraj-test-resursi add-test-resource src / integracija-test / resursi 

9. Zaključak

Ovaj je članak nastavio koristiti Maven za pokretanje integracijskih testova s ​​Jetty poslužiteljem, usredotočujući se na konfiguraciju Mavena pouzdan i neispravan dodaci.

Kompletni izvorni kôd za ovu lekciju možete pronaći na GitHubu.