Merking og filtrering av JUnit-tester

1. Oversikt

Det er veldig vanlig å utføre alle våre JUnit-tester automatisk som en del av CI-bygningen ved hjelp av Maven. Dette er imidlertid ofte tidkrevende.

Derfor, Vi vil ofte filtrere testene våre og utføre enten enhetstester eller integrasjonstester eller begge deler på forskjellige stadier av byggeprosessen.

I denne opplæringen vil vi se på noen filtreringsteknikker for testtilfeller med JUnit 5. I de følgende avsnittene vil vi også se på forskjellige filtreringsmekanismer før JUnit 5.

2. JUnit 5-koder

2.1. Kommenterer JUnit-tester med stikkord

Med JUnit 5 kan vi filtrere tester ved å merke en delmengde av dem under et unikt tagnavn. Anta for eksempel at vi har både enhetstester og integrasjonstester implementert ved hjelp av JUnit 5. Vi kan legge til koder på begge sett med testtilfeller:

@Test @Tag ("IntegrationTest") public void testAddEmployeeUsingSimpelJdbcInsert () {} @Test @Tag ("UnitTest") public void givenNumberOfEmployeeWhenCountEmployeeThenCountMatch () {}

Fra nå av kan vi utføre alle tester under et bestemt kodenavn hver for seg. Vi kan også merke klassen i stedet for metoder. Dermed inkluderer alle tester i en klasse under en tag.

I de neste avsnittene ser vi forskjellige måter å filtrere og utføre de merkede JUnit-testene på.

2.2. Filtrering av tagger med Test Suite

JUnit 5 lar oss implementere testpakker der vi kan utføre merkede testtilfeller:

@RunWith (JUnitPlatform.class) @SelectPackages ("com.baeldung.tags") @IncludeTags ("UnitTest") offentlig klasse ansattDAOUnitTestSuite {}

Nå, hvis vi driver denne suiten, alle JUnit-tester under merkelappen Enhetstest ville bli henrettet. På samme måte kan vi ekskludere tester med ExcludeTags kommentar.

2.3. Filtrering av tagger med Maven Surefire Plugin

For å filtrere JUnit-tester i de forskjellige fasene av Maven-bygningen, kan vi bruke pluggen Maven Surefire. Surefire-pluginet lar oss inkludere eller ekskludere kodene i plugin-konfigurasjonen:

 maven-surefire-plugin 2.20.1 UnitTest 

Hvis vi nå utfører dette pluginet, vil det utføre alle tester som er merket som Enhetstest. På samme måte kan vi ekskludere testtilfeller under et kodenavn:

IntegrationTest

2.4. Filtrering av koder med IDE

IDE-er tillater nå filtrering av JUnit-testene etter koder. På denne måten kan vi utføre et spesifikt sett med merkede tester direkte fra IDE.

IntelliJ tillater slik filtrering gjennom en tilpasset Run / Debug Configuration:

Som vist i dette bildet valgte vi Test Type som tags og taggen som skal utføres i Tag Expression.

JUnit 5 tillater forskjellige taguttrykk som kan brukes til å filtrere kodene. For eksempel, for å kjøre alt annet enn integrasjonstestene, kunne vi bruke IntegrationTest som Tag Expression. Eller for å utføre begge deler Enhetstest og Integrasjonstest, Vi kan bruke Enhetstest | IntegrationTest.

På samme måte tillater Eclipse også å inkludere eller ekskludere koder i JUnit Run / Debug-konfigurasjonene:

3. JUnit 4 kategorier

3.1. Kategorisering av JUnit-tester

JUnit 4 lar oss utføre en delmengde av JUnit-tester ved å legge dem til i forskjellige kategorier. Som et resultat kan vi utføre testsakene i en bestemt kategori mens vi ekskluderer andre kategorier.

Vi kan opprette så mange kategorier ved å implementere markørgrensesnitt der navnet på markørgrensesnittet representerer navnet på kategorien. For vårt eksempel implementerer vi to kategorier, Enhetstest:

offentlig grensesnitt UnitTest {}

og Integrasjonstest:

offentlig grensesnitt IntegrationTest {}

Nå kan vi kategorisere vår JUnit ved å kommentere den med Kategori kommentar:

@Test @Category (IntegrationTest.class) public void testAddEmployeeUsingSimpelJdbcInsert () {} @Test @Category (UnitTest.class) public void givenNumberOfEmployeeWhenCountEmployeeThenCountMatch () {}

I vårt eksempel setter vi Kategori kommentar om testmetodene. På samme måte kan vi også legge til denne kommentaren på testklassen, og dermed legge til alle testene i en kategori.

3.2. Kategorier Løper

For å kunne utføre JUnit-tester i en kategori, må vi implementere en test suite-klasse:

@RunWith (Categories.class) @IncludeCategory (UnitTest.class) @SuiteClasses (EmployeeDAOCategoryIntegrationTest.class) offentlig klasse EmployeeDAOUnitTestSuite {}

Denne testpakken kan kjøres fra en IDE og vil utføre alle JUnit-tester under Enhetstest kategori. På samme måte kan vi også ekskludere en kategori tester i suiten:

@RunWith (Categories.class) @ExcludeCategory (IntegrationTest.class) @SuiteClasses (EmployeeDAOCategoryIntegrationTest.class) offentlig klasse EmployeeDAOUnitTestSuite {}

3.3. Ekskluderer eller inkluderer kategorier i Maven

Til slutt kan vi også inkludere eller ekskludere kategoriene av JUnit-tester fra Maven-bygningen. Dermed kan vi utføre forskjellige kategorier av JUnit-tester i forskjellige Maven-profiler.

Vi bruker Maven Surefire-plugin for dette:

 maven-surefire-plugin 2.20.1 com.baeldung.categories.UnitTest 

Og på samme måte kan vi ekskludere en kategori fra Maven-bygningen:

 maven-surefire-plugin 2.20.1 com.baeldung.categories.IntegrationTest 

Dette ligner på eksemplet vi diskuterte i forrige avsnitt. Den eneste forskjellen er at vi erstattet taggenavnet med det fullstendige navnet på Kategori gjennomføring.

4. Filtrering av JUnit-tester med Maven Surefire Plugin

Begge tilnærmingene vi har diskutert, er implementert med JUnit-biblioteket. En implementeringsagnostisk måte å filtrere testtilfeller på er å følge en navngivningskonvensjon. For vårt eksempel bruker vi UnitTest-suffiks for enhetstester og IntegrationTest for integrasjonstester.

Nå bruker vi Maven Surefire Plugin for å utføre enten enhetstestene eller integrasjonstestene:

 maven-surefire-plugin 2.20.1 ** / * IntegrationTest.java 

De ekskluderer tag her filtrerer alle integrasjonstester og utfører bare enhetstestene. En slik konfigurasjon vil spare en betydelig mengde byggetid.

Videre kan vi utføre Surefire plugin i forskjellige Maven-profiler med forskjellige ekskluderinger eller inneslutninger.

Selv om Surefire fungerer bra for filtrering, anbefales det å bruke Failsafe Plugin for å utføre integrasjonstester i Maven.

5. Konklusjon

I denne artikkelen så vi en måte å merke og filtrere testtilfeller med JUnit 5. Vi brukte stikkord kommentar og så også forskjellige måter for å filtrere JUnit-testene med en bestemt tag gjennom IDE eller i byggeprosessen ved hjelp av Maven.

Vi diskuterte også noen av filtreringsmekanismene før JUnit 5.

Alle eksempler er tilgjengelige på Github.


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