Programmering

Enhedstest og integrationstest med Maven- og JUnit-kategorier

Dette eksempel viser, hvordan man opdeler enheds- og integrationstest ved hjælp af Maven- og JUnit-kategorier.

Det er især nyttigt for eksisterende testsuiter og kan implementeres på få minutter.

Mit tidligere indlæg viste, hvordan vi brugte en maven-profil til at opdele enheds- og integrationstest.

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

Dette har været et meget læst indlæg, og jeg kan godt lide, hvordan det bruger separate mapper. Imidlertid viser dette eksempel en meget enklere teknik, der let kan anvendes til ældre testpakker.

Det giver de fleste fordele ved originalen og sidder mere komfortabelt i Maven-verdenen.

Koden til eksemplet er her.

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

Fra og med JUnit 4.8 kan du definere dine egne kategorier til test. Dette giver dig mulighed for at mærke og gruppere tests.

Dette eksempel viser, hvor let det er at adskille enhed og integrationstest ved hjælp af @Catgegory-kommentaren.

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

Det første trin i gruppering af en test ved hjælp af kategorier er at oprette en markørgrænseflade.

Denne grænseflade vil blive brugt til at markere alle de tests, du vil køre, som integrationstest.

offentlig grænseflade IntegrationTest {} 

Tilføj kategoriangivelsen øverst i din testklasse. Det tager navnet på din nye grænseflade.

import org.junit.experimental.categories.Category; @Category (IntegrationTest.class) offentlig klasse EksempelIntegrationTest {@Test offentlig ugyldig longRunningServiceTest () kaster undtagelse {}} 

Kategorier kan bruges til at markere klasser eller metoder. Virkelig efter min mening skal du kun markere en klasse.

Hvis du har både enheds- og integrationstest i en enkelt klasse, skal du dele den.

Skønheden ved denne løsning er, at intet virkelig ændrer sig for enhedstestsiden af ​​tingene.

Vi tilføjer simpelthen en eller anden konfiguration til maven surefire-pluginet for at få det til at ignorere eventuelle integrationstest.

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

Der er 2 meget vigtige dele. Den første er at konfigurere surefire til at udelukke alle integrationstests.

com.test.annotation.type.IntegrationTest 

Surefire kører alle dine tests undtagen dem, der er markeret som en integrationstest.

Den anden vigtige del er at sikre, at surefire-pluginet bruger den rigtige JUnit-udbyder. JUnit47-udbyderen er nødvendig for at registrere kategorierne korrekt.

  org.apache.maven.surefire surefire-junit47 2.12 

For at sikre, at dette fungerer korrekt, kan vi køre enhedstestene

mvn ren test 

Du kan se fra nedenstående output, at enhedstesten køres, men ikke integrationstesten.

-------------------------------------------------- ----- TESTER -------------------------------------------- ----------- Kører com.test.EmptyUnitTest Testkørsel: 1, Fejl: 0, Fejl: 0, Springet over: 0, Forløbet tid: 0 sek Resultater: Testkørsel: 1, Fejl: 0, Fejl: 0, springet over: 0 [INFO] ---------------------------------------- -------------------------------- [INFO] BYG SUCCES [INFO] ---------- -------------------------------------------------- ------------ 

Igen er konfigurationen for dette meget enkel.

Vi bruger standard failsafe plugin og konfigurerer det til kun at køre integrationstest.

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

Konfigurationen bruger et standardudførelsesmål til at køre failsafe-pluginet under integrationstestfasen af ​​buildet.

Den følgende konfiguration sikrer, at kun integrationstestene køres.

com.test.annotation.type.IntegrationTest 

Og igen skal JUnit-udbyderen være korrekt konfigureret.

  org.apache.maven.surefire surefire-junit47 2.12 

Det er det!

Vi kan nu køre hele buildet.

mvn ren installation 

Denne gang såvel som enhedstesten kører, køres integrationstestene under integrationstestfasen.

-------------------------------------------------- ----- TESTER -------------------------------------------- ----------- Kører com.test.AnotherEmptyIntegrationTest Testkørsel: 1, Fejl: 0, Fejl: 0, springet over: 0, forløbet tid: 0,016 sek Kører com.test.EmptyIntegrationTest Testkørsel: 1, Fejl: 0, Fejl: 0, Springet over: 0, Forløbet tid: 0 sek Resultater: Testkørsel: 2, Fejl: 0, Fejl: 0, Springet over: 0 

For at se, hvor let det er at tilføje kodedækning til denne metode, skal du tjekke dette link.

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

For et mere komplet eksempel, der bruger starter Tomcat og en database.

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/code-co ... mvn ren installation -Ptomcat-integreret 

Det er baseret på dette eksempel

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

Denne historie, "Unit and Integration Tests With Maven and JUnit Categories" blev oprindeligt udgivet af JavaWorld.