Mærkning og filtrering af JUnit-tests

1. Oversigt

Det er meget almindeligt at udføre alle vores JUnit-tests automatisk som en del af CI-bygningen ved hjælp af Maven. Dette er dog ofte tidskrævende.

Derfor, vi vil ofte filtrere vores tests og udføre enten enhedstest eller integrationstest eller begge dele på forskellige trin i byggeprocessen.

I denne vejledning ser vi på et par filtreringsteknikker til testsager med JUnit 5. I de følgende afsnit vil vi også se på forskellige filtreringsmekanismer før JUnit 5.

2. JUnit 5-tags

2.1. Annotering af JUnit-tests med Tag

Med JUnit 5 kan vi filtrere tests ved at tagge en delmængde af dem under et unikt tagnavn. Antag for eksempel, at vi har både enhedstest og integrationstest implementeret ved hjælp af JUnit 5. Vi kan tilføje tags på begge sæt testsager:

@Test @Tag ("IntegrationTest") offentlig ugyldighedstestAddEmployeeUsingSimpelJdbcInsert () {} @Test @Tag ("UnitTest") offentligt ugyldigt givenNumberOfEmployeeWhenCountEmployeeThenCountMatch () {}

Fremover kan vi udføre alle test under et bestemt tagnavn separat. Vi kan også tagge klassen i stedet for metoder. Dermed inkluderer alle prøver i en klasse under en tag.

I de næste par sektioner vil vi se forskellige måder at filtrere og udføre de taggede JUnit-tests på.

2.2. Filtrering af tags med Test Suite

JUnit 5 giver os mulighed for at implementere testpakker, hvorigennem vi kan udføre mærkede testsager:

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

Hvis vi kører denne suite, alle JUnit-tests under taggen Enhedstest ville blive henrettet. På samme måde kan vi udelukke test med ExcludeTags kommentar.

2.3. Filtrering af tags med Maven Surefire Plugin

Til filtrering af JUnit-test inden for de forskellige faser af Maven-buildet kan vi bruge Maven Surefire-pluginet. Surefire-pluginet giver os mulighed for at inkludere eller ekskludere tags i plugin-konfigurationen:

 maven-surefire-plugin 2.20.1 UnitTest 

Hvis vi nu udfører dette plugin, udfører det alle tests, der er mærket som Enhedstest. På samme måde kan vi ekskludere testsager under et tagnavn:

IntegrationTest

2.4. Filtrering af tags med en IDE

IDE'er tillader nu filtrering af JUnit-testene efter tags. På denne måde kan vi udføre et specifikt sæt taggede tests direkte fra vores IDE.

IntelliJ tillader sådan filtrering gennem en brugerdefineret Run / Debug-konfiguration:

Som vist på dette billede valgte vi Test Kind som tags og det tag, der skal udføres i Tag Expression.

JUnit 5 tillader forskellige tagudtryk, som kan bruges til at filtrere tags. For eksempel, for at køre alt andet end integrationstestene, kunne vi bruge ! IntegrationTest som tagudtrykket. Eller til at udføre begge dele Enhedstest og IntegrationTest, vi kan bruge UnitTest | IntegrationTest.

Tilsvarende tillader Eclipse også inkludering eller ekskludering af tags i JUnit Run / Debug-konfigurationerne:

3. JUnit 4 kategorier

3.1. Kategorisering af JUnit-tests

JUnit 4 giver os mulighed for at udføre en delmængde af JUnit-tests ved at tilføje dem i forskellige kategorier. Som et resultat kan vi udføre testsagerne i en bestemt kategori uden at udelukke andre kategorier.

Vi kan oprette så mange kategorier ved at implementere markørgrænseflader, hvor navnet på markørgrænsefladen repræsenterer navnet på kategorien. For vores eksempel implementerer vi to kategorier, Enhedstest:

offentlig grænseflade UnitTest {}

og IntegrationTest:

offentlig grænseflade IntegrationTest {}

Nu kan vi kategorisere vores JUnit ved at kommentere den med Kategori kommentar:

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

I vores eksempel sætter vi Kategori kommentar om testmetoderne. På samme måde kan vi også tilføje denne kommentar til testklassen og dermed tilføje alle tests i en kategori.

3.2. Kategorier Løber

For at udføre JUnit-tests i en kategori er vi nødt til at implementere en test suite-klasse:

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

Denne testpakke kan udføres fra en IDE og vil udføre alle JUnit-test under Enhedstest kategori. På samme måde kan vi også ekskludere en kategori af tests i pakken:

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

3.3. Ekskluderer eller inkluderer kategorier i Maven

Endelig kan vi også inkludere eller ekskludere kategorierne af JUnit-test fra Maven-bygningen. Således kan vi udføre forskellige kategorier af JUnit-tests i forskellige Maven-profiler.

Vi bruger Maven Surefire-pluginet til dette:

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

Og på samme måde kan vi udelukke en kategori fra Maven-bygningen:

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

Dette svarer til eksemplet, vi diskuterede i det foregående afsnit. Den eneste forskel er, at vi erstattede tagnavnet med det fuldt kvalificerede navn på Kategori implementering.

4. Filtrering af JUnit-test med Maven Surefire-plugin

Begge de tilgange, vi har diskuteret, er implementeret i JUnit-biblioteket. En implementeringsagnostisk måde at filtrere testsager på er ved at følge en navngivningskonvention. I vores eksempel bruger vi UnitTest-suffikset til enhedstest og IntegrationTest til integrationstest.

Nu bruger vi Maven Surefire Plugin til at udføre enten enhedstestene eller integrationstestene:

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

Det udelukker tag her filtrerer alle integrationstests og udfører kun enhedstestene. En sådan konfiguration vil spare en betydelig mængde byggetid.

Desuden kan vi udføre Surefire plugin inden for forskellige Maven-profiler med forskellige udelukkelser eller inklusioner.

Selvom Surefire fungerer godt til filtrering, det anbefales at bruge Failsafe Plugin til at udføre integrationstest i Maven.

5. Konklusion

I denne artikel så vi en måde at tagge og filtrere testsager med JUnit 5. Vi brugte Tag kommentar og så også forskellige måder til filtrering af JUnit-testene med et specifikt tag gennem IDE eller i byggeprocessen ved hjælp af Maven.

Vi diskuterede også nogle af filtreringsmekanismerne før JUnit 5.

Alle eksempler er tilgængelige på Github.


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