Programmering

Enhets- og integrasjonstester med Maven- og JUnit-kategorier

Dette eksemplet viser hvordan du kan dele enhet- og integrasjonstester ved hjelp av Maven- og JUnit-kategorier.

Det er spesielt nyttig for eksisterende testserier og kan implementeres på få minutter.

Mitt forrige innlegg viste hvordan vi brukte en maven-profil til å dele enhet- og integrasjonstester.

//johndobie.blogspot.co.uk/2011/06/seperating-maven-unit-integration-tests.html

Dette har vært et veldig godt lest innlegg, og jeg liker hvordan det bruker separate kataloger. Imidlertid viser dette eksemplet en mye enklere teknikk som lett kan brukes på eldre testsuiter.

Det gir de fleste fordelene med originalen, og sitter mer komfortabelt i Maven-verdenen.

Koden for eksemplet er her.

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/categor ... mvn ren installasjon 

Fra og med JUnit 4.8 kan du definere dine egne kategorier for tester. Dette lar deg merke og gruppere tester.

Dette eksemplet viser hvor enkelt det er å skille enhet og integrasjonstest ved hjelp av @Catgegory-merknaden.

//kentbeck.github.com/junit/javadoc/latest/org/junit/experimental/categories/Categories.html

Det første trinnet i å gruppere en test ved hjelp av kategorier er å lage et markørgrensesnitt.

Dette grensesnittet vil bli brukt til å markere alle testene du vil skal kjøres som integrasjonstester.

offentlig grensesnitt IntegrationTest {} 

Legg til kategoriinnmerkingen øverst i testklassen din. Det tar navnet på det nye grensesnittet.

importer org.junit.experimental.categories.Category; @Category (IntegrationTest.class) public class EksempelIntegrationTest {@Test public void longRunningServiceTest () kaster unntak {}} 

Kategorier kan brukes til å markere klasser eller metoder. Virkelig etter min mening bør du bare merke en klasse.

Hvis du har både enhets- og integrasjonstester i en enkelt klasse, så del den.

Det fine med denne løsningen er at ingenting virkelig endres for enhetstestsiden av ting.

Vi legger ganske enkelt til noen konfigurasjon til maven surefire plugin for å gjøre det å ignorere eventuelle integrasjonstester.

 org.apache.maven.plugins maven-surefire-plugin 2.11 org.apache.maven.surefire surefire-junit47 2.12 ** / *. klasse com.test.annotation.type.IntegrationTest 

Det er to veldig viktige deler. Den første er å konfigurere surefire for å ekskludere alle integrasjonstestene.

com.test.annotation.type.IntegrationTest 

Surefire kjører alle testene dine, bortsett fra de som er merket som en integrasjonstest.

Den andre viktige delen er å sørge for at surefire plugin bruker riktig JUnit-leverandør. JUnit47-leverandøren er nødvendig for å oppdage kategoriene riktig.

  org.apache.maven.surefire surefire-junit47 2.12 

For å sikre at dette fungerer riktig kan vi kjøre enhetstestene

mvn ren test 

Du kan se fra utdataene nedenfor at enhetstesten kjøres, men ikke integrasjonstesten.

-------------------------------------------------- ----- TESTER -------------------------------------------- ----------- Kjører com.test.EmptyUnitTest Testkjøring: 1, Feil: 0, Feil: 0, Hoppet over: 0, Forløpt tid: 0 sek Resultater: Testkjøring: 1, Feil: 0, Feil: 0, hoppet over: 0 [INFO] ---------------------------------------- -------------------------------- [INFO] BYGG SUKSESS [INFO] ---------- -------------------------------------------------- ------------ 

Igjen er konfigurasjonen for dette veldig enkel.

Vi bruker standard failsafe-plugin og konfigurerer den til kun å kjøre integrasjonstestene.

 maven-failsafe-plugin 2.12 org.apache.maven.surefire surefire-junit47 2.12 com.test.annotation.type.IntegrationTest integration-test ** / *. class 

Konfigurasjonen bruker et standard utførelsesmål for å kjøre failsafe-pluginet under integrasjonstestfasen av build.

Følgende konfigurasjon sikrer at bare integrasjonstestene kjøres.

com.test.annotation.type.IntegrationTest 

Og igjen må JUnit-leverandøren være riktig konfigurert.

  org.apache.maven.surefire surefire-junit47 2.12 

Det er det!

Vi kan nå kjøre hele bygningen.

mvn ren installasjon 

Denne gangen, i tillegg til at enhetstesten kjører, kjøres integrasjonstestene i løpet av integrasjonstestfasen.

-------------------------------------------------- ----- TESTER -------------------------------------------- ----------- Kjører com.test.AnotherEmptyIntegrationTest Tester kjører: 1, Feil: 0, feil: 0, hoppes over: 0, forløpt tid: 0,016 sek Kjører com.test.EmptyIntegrationTest Feil: 0, feil: 0, hoppet over: 0, forløpt tid: 0 sek Resultater: testkjøring: 2, feil: 0, feil: 0, hoppet over: 0 

For å se hvor enkelt det er å legge til kodedekning til denne metoden, sjekk ut denne lenken.

//johndobie.blogspot.co.uk/2012/05/easy-unit-and-integration-code-coverage.html

For et mer komplett eksempel som bruker starter Tomcat og en database.

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/code-co ... mvn ren installasjon -Ptomcat-innebygd 

Det er basert på dette eksemplet

//johndobie.blogspot.com/2011/10/maven-integration-testing-and-spring.html

Denne historien, "Unit and Integration Tests With Maven and JUnit Categories" ble opprinnelig utgitt av JavaWorld.

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