Java >> Java tutorial >  >> Tag >> maven

Spring over prøver med Maven

1. Introduktion

At springe prøver over er ofte en dårlig idé. Der er dog nogle situationer, hvor det kunne være nyttigt - måske når vi udvikler ny kode og vil køre mellemliggende builds, hvor testene ikke består eller kompilerer.

Kun i denne slags situationer kan vi springe testene over for at undgå omkostningerne ved at kompilere og køre dem. Overvej selvfølgelig, at ikke at køre test kan føre til dårlig kodningspraksis.

I denne hurtige tutorial vil vi udforske alle de mulige kommandoer og muligheder for at springe test over ved hjælp af Maven .

2. Maven Lifecycle

Før vi går ind i detaljerne om, hvordan man springer tests over, skal vi forstå, hvornår tests kompileres eller køres . I artiklen om Mavens mål og faser går vi dybere ind i begrebet Mavens livscyklus, men til formålet med denne artikel er det vigtigt at vide, at Maven kan:

  1. Ignorer test
  2. Kompiler tests
  3. Kør test

I vores eksempler bruger vi pakken fase, som omfatter kompilering og afvikling af testene. De muligheder, der er udforsket i denne øvelse, tilhører Maven Surefire Plugin.

3. Brug af kommandolinjeflag

3.1. Spring over testkompileringen

Lad os først se på et eksempel på en test, der ikke kompilerer:

@Test
public void thisDoesntCompile() {
    baeldung;
}

Når vi kører kommandolinjekommandoen:

mvn package

Vi får en fejlmeddelelse:

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /Users/baeldung/skip-tests/src/test/java/com/antmordel/skiptests/PowServiceTest.java:[11,9] not a statement
[INFO] 1 error

Lad os derfor undersøge hvordan man springer kompileringsfasen over for testens kilder. I Maven kan vi bruge maven.test.skip flag:

mvn -Dmaven.test.skip package

Som følge heraf kompileres testkilderne ikke og udføres derfor ikke.

3.2. Spring over testudførelsen

Som en anden mulighed, lad os se, hvordan vi kan kompilere testmappen, men springe kørselsprocessen over . Dette er nyttigt i de tilfælde, hvor vi ikke ændrer signaturen på metoderne eller klasserne, men vi har ændret forretningslogikken, og som et resultat heraf brød vi testene. Lad os overveje en konstrueret testcase som den nedenfor, som altid vil mislykkes:

@Test
public void thisTestFails() {
    fail("This is a failed test case");
}

Da vi inkluderede sætningen fail() , hvis vi kører pakken fase, vil bygningen mislykkes med fejlen:

[ERROR] Failures:
[ERROR]   PowServiceTest.thisTestFails:16 This is a failed test case
[INFO]
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0

Lad os forestille os, at vi ønsker at springe testene over, men vi vil alligevel gerne kompilere dem. I dette tilfælde kan vi bruge -DskipTests flag:

mvn -DskipTests package

og pakkefasen vil lykkes. Også i Maven er der et dedikeret plugin til at køre integrationstest kaldet maven failsafe plugin. -DskipTests vil springe udførelsen af ​​både enhedstest (surefire) og integrationstest (failsafe). For blot at springe integrationstestene over kan vi bestå -DskipIT'erne  systemegenskab.

Til sidst er det værd at nævne, at det nu forældede flag -Dmaven.test.skip.exec vil også kompilere testklasserne, men vil ikke køre dem.

4. Brug af Maven-konfiguration

I tilfælde af, at vi skal udelukke kompilering eller kørsel af testene i længere tid, kan vi ændre pom.xml fil for at inkludere den korrekte konfiguration.

4.1. Spring over testkompileringen

Som vi gjorde i det foregående afsnit, lad os undersøge, hvordan vi kan undgå at kompilere testmappen. I dette tilfælde bruger vi pom.xml fil. Lad os tilføje følgende egenskab:

<properties>
    <maven.test.skip>true</maven.test.skip>
</properties>

Husk på, at vi kan tilsidesætte denne værdi ved at tilføje det modsatte flag på kommandolinjen :

mvn -Dmaven.test.skip=false package

4.2. Spring over testudførelsen

Igen, lad os som et andet trin undersøge, hvordan vi kan bygge testmappen, men springe testudførelsen over ved hjælp af Maven-konfigurationen. For at gøre det skal vi konfigurere Maven Surefire Plugin med en egenskab:

<properties>
    <tests.skip>true</tests.skip>
</properties>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.2</version>
    <configuration>
        <skipTests>${tests.skip}</skipTests>
    </configuration>
</plugin>

Maven-ejendommen tests.skip er en tilpasset egenskab, som vi tidligere har defineret. Derfor kan vi tilsidesætte det, hvis vi ønsker at udføre testene:

mvn -Dtests.skip=false package

4. Konklusion

I denne hurtige vejledning har vi undersøgt alle de alternativer, som Maven tilbyder, for at springe over at kompilere og/eller køre testene.

Vi gennemgik Maven-kommandolinjeindstillingerne og Maven-konfigurationsmulighederne.


Java tag