Bouw een pot met Maven en negeer de testresultaten

1. Inleiding

Deze korte handleiding laat zien hoe je een pot bouwt met Maven terwijl je de testresultaten negeert.

Standaard voert Maven unit-tests automatisch uit tijdens het bouwen van het project. Echter, er zijn zeldzame gevallen waarin de tests kunnen worden overgeslagen en we het project moeten bouwen ongeacht de testresultaten.

2. Bouwen aan het project

Laten we een eenvoudig project maken waarin we ook een kleine testcase opnemen:

openbare klasse TestFail {@Test openbare leegte whenMessageAssigned_thenItIsNotNull () {String message = "hallo daar"; assertNotNull (bericht); }}

Laten we een jar-bestand bouwen door de volgende Maven-opdracht uit te voeren:

mvn-pakket

Dit resulteert in het compileren van de bronnen en het genereren van een maven-0.0.1-SNAPSHOT.jar bestand in de map / target.

Laten we nu de test een beetje veranderen, zodat de test begint te mislukken.

@ Test openbare ongeldige whenMessageAssigned_thenItIsNotNull () {String message = null; assertNotNull (bericht); }

Deze keer, wanneer we proberen het mvn-pakket opdracht opnieuw, mislukt de build en wordt het bestand maven-0.0.1-SNAPSHOT.jar niet gemaakt.

Dit betekent, als we een falende test in onze applicatie hebben, kunnen we geen uitvoerbaar bestand leveren, tenzij we de test repareren.

Dus hoe kunnen we dit probleem oplossen?

3. Maven-argumenten

Maven heeft zijn eigen argumenten om met dit probleem om te gaan:

  • -Dmaven.test.failure.ignore = waarnegeert elke fout die optreedt tijdens het uitvoeren van de test
  • -Dmaven.test.skip = waar zou de tests niet compileren
  • -fn, -fae faalt nooit de build, ongeacht de testresultaten

Laten we het mvn pakket -Dmaven.test.skip = true commando en zie de resultaten:

[INFO] Tests worden overgeslagen. [INFO] BOUW SUCCES

Dit betekent dat het project wordt gebouwd zonder de tests samen te stellen.

Laten we nu het mvn pakket -Dmaven.test.failure.ignore = true opdracht:

[INFO] Testfail.TestFail wordt uitgevoerd [ERROR] whenMessageAssigned_thenItIsNotNull java.lang.AssertionError [INFO] BOUW SUCCES

Onze unit-test mislukt op bewering, maar de build is succesvol.

Laten we tot slot het -fn, -fae opties. Beide, pakket -fn en pakket -fae commando's bouwen het pot bestand en produceer het BOUW SUCCES output ongeacht whenMessageAssigned_thenItIsNotNull () test mislukt.

In het geval van het project met meerdere modules -fn optie moet worden gebruikt. -fae gaat verder met de module die een falende test heeft, maar slaat alle afhankelijke modules over.

4. Maven Surefire-plug-in

Een andere handige manier om ons doel te bereiken, is door de Surefire-plug-in van Maven te gebruiken.

Raadpleeg dit artikel voor een uitgebreid overzicht van de Surefire-plug-in.

Om mislukte tests te negeren, kunnen we eenvoudig de testFailureIgnore eigendom aan waar:

 maven-surefire-plugin $ {maven.surefire.version} TestFail.java waar 

Laten we nu eens kijken naar de uitvoer van het pakket opdracht:

[INFO] T E S T S [INFO] Testfail.TestFail wordt uitgevoerd [ERROR] Tests worden uitgevoerd: 1, fouten: 1, fouten: 0, overgeslagen: 0, <<< FAILURE! - in testfail.TestFail

Uit de uitvoer van de lopende tests kunnen we de TestFail klasse faalt. Maar als we verder kijken, zien we dat het bericht BUILD SUCCESS er ook is en dat het bestand maven-0.0.1-SNAPSHOT.jar is gecompileerd.

Afhankelijk van onze behoefte kunnen we het uitvoeren van de tests helemaal overslaan. Daarvoor kunnen we de testFailureIgnore lijn met:

waar

Of stel het opdrachtregelargument in -DskipTests. Hierdoor worden de testklassen gecompileerd, maar wordt de testuitvoering volledig overgeslagen.

5. Conclusie

In dit artikel hebben we geleerd hoe we ons project met Maven kunnen bouwen, ongeacht de testresultaten. We hebben de praktische voorbeelden doorgenomen van het overslaan van de falende tests of het volledig uitsluiten van de compilatie van de tests.

Zoals gewoonlijk is de volledige code voor dit artikel beschikbaar op het GitHub-project.


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