Ohjelmointi

Yksikkö- ja integraatiotestit Maven- ja JUnit-luokilla

Tämä esimerkki osoittaa, kuinka yksikkö- ja integraatiotestit voidaan jakaa Maven- ja JUnit-luokkien avulla.

Se on erityisen hyödyllinen olemassa oleville testipaketeille ja voidaan toteuttaa muutamassa minuutissa.

Edellinen viestini osoitti, kuinka käytämme profiilia profiilin jakamiseen yksikkö- ja integraatiotesteissä.

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

Tämä on ollut erittäin luettu viesti ja pidän siitä, miten se käyttää erillisiä hakemistoja. Tämä esimerkki kuitenkin osoittaa paljon yksinkertaisemman tekniikan, jota voidaan helposti soveltaa vanhoihin testipaketteihin.

Se tarjoaa suurimman osan alkuperäisen eduista ja istuu mukavammin Maven-maailmassa.

Esimerkin koodi on täällä.

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/categor ... mvn puhdas asennus 

JUnit 4.8: sta alkaen voit määrittää omat luokat testeille. Tämän avulla voit merkitä ja ryhmittää testit.

Tämä esimerkki osoittaa, kuinka helppoa on erottaa yksikkö ja integraatiotesti @Catgegory-merkinnällä.

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

Ensimmäinen vaihe testin ryhmittelyssä luokkien avulla on luoda merkkiliitäntä.

Tätä käyttöliittymää käytetään merkitsemään kaikki testit, jotka haluat suorittaa integraatiotesteinä.

julkinen käyttöliittymä IntegrationTest {} 

Lisää luokan merkintä testiluokan kärkeen. Se ottaa uuden käyttöliittymän nimen.

tuo org.junit.experimental.categories.Category; @Category (IntegrationTest.class) public class ExampleIntegrationTest {@Test public void longRunningServiceTest () heittää poikkeuksen {}} 

Luokat voidaan käyttää luokkien tai menetelmien merkitsemiseen. Minun pitäisi mielestäni merkitä vain luokka.

Jos sinulla on sekä yksikkö- että integrointitestit yhdessä luokassa, jaa se.

Tämän ratkaisun kauneus on, että mikään ei todellakaan muutu asioiden yksikkötestipuolella.

Lisäämme yksinkertaisesti jonkin kokoonpanon maven surefire -laajennukseen, jotta se ei huomioi mitään integraatiotestejä.

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

On 2 erittäin tärkeää osaa. Ensimmäinen on konfiguroida surefire sulkemaan pois kaikki integraatiotestit.

com.test.annotation.type.IntegrationTest 

Surefire suorittaa kaikki testisi, paitsi integraatiotestinä merkityt testit.

Toinen tärkeä osa on varmistaa, että surefire-laajennus käyttää oikeaa JUnit-palveluntarjoajaa. JUnit47-palveluntarjoajaa tarvitaan luokkien oikeaan tunnistamiseen.

  org.apache.maven.surefire surefire-junit47 2.12 

Varmistaaksemme, että tämä toimii oikein, voimme suorittaa yksikötestit

mvn puhdas testi 

Alla olevasta lähdöstä näet, että yksikkötesti suoritetaan, mutta ei integraatiotestiä.

-------------------------------------------------- ----- TESTIT -------------------------------------------- ----------- Suoritetaan com.test.EmptyUnitTest-testit suoritetaan: 1, epäonnistumiset: 0, virheet: 0, ohitettu: 0, kulunut aika: 0 s Tulokset: Testit suoritettu: 1, epäonnistumiset: 0, Virheet: 0, ohitettu: 0 [INFO] ---------------------------------------- -------------------------------- [INFO] RAKENNA MENESTYKSET [INFO] ---------- -------------------------------------------------- ------------ 

Jälleen tämän määritys on hyvin yksinkertaista.

Käytämme standardia Failsafe-laajennusta ja määritämme sen suorittamaan vain integrointitestit.

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

Kokoonpano käyttää tavallista suoritustavoitetta suorittamaan Failsafe-laajennuksen koontiversion integrointitestivaiheessa.

Seuraava kokoonpano varmistaa, että vain integraatiotestit suoritetaan.

com.test.annotation.type.IntegrationTest 

JUnit-palveluntarjoajan on jälleen oltava oikein määritetty.

  org.apache.maven.surefire surefire-junit47 2.12 

Se siitä!

Voimme nyt suorittaa koko rakennuksen.

mvn puhdas asennus 

Tällä kertaa sekä yksikkötestin käynnissä että integraatiotestit suoritetaan integrointitestivaiheessa.

-------------------------------------------------- ----- TESTIT -------------------------------------------- ----------- Käynnissä com.test.AnotherEmptyIntegrationTest-testit suoritettu: 1, epäonnistumiset: 0, virheet: 0, ohitettu: 0, kulunut aika: 0,016 sek. Käynnissä com.test.EmptyIntegrationTest-testit suoritettu: 1, Virheet: 0, Virheet: 0, Ohitettu: 0, Kulunut aika: 0 sek Tulokset: Testit suoritettu: 2, Virheet: 0, Virheet: 0, Ohitettu: 0 

Katso tämä linkki nähdäksesi kuinka helppoa on lisätä koodikattavuus tähän menetelmään.

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

Täydellisempi esimerkki, joka käyttää Tomcatin käynnistyksiä ja tietokantaa.

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/code-co ... mvn puhdas asennus -Ptomcat-upotettu 

Se perustuu tähän esimerkkiin

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

Tämän tarinan "Unit and Integration Tests With Maven and JUnit Categories" julkaisi alun perin JavaWorld.