Tests overslaan met Maven

1. Inleiding

Tests overslaan is vaak een slecht idee. Er zijn echter situaties waarin het nuttig zou kunnen zijn - misschien wanneer we nieuwe code ontwikkelen en tussentijdse builds willen uitvoeren waarbij de tests niet slagen of compileren.

Alleen in dit soort situaties kunnen we de tests overslaan om de overhead van het compileren en uitvoeren ervan te vermijden. Bedenk natuurlijk dat het niet uitvoeren van tests kan leiden tot slechte coderingspraktijken.

In deze korte tutorial zullen we verkennen alle mogelijke opdrachten en opties om tests met Maven over te slaan.

2. Maven levenscyclus

Voordat u ingaat op de details van het overslaan van tests, we moeten begrijpen wanneer tests worden gecompileerd of uitgevoerd. In het artikel over Maven-doelen en fasen gaan we dieper in op het concept van de Maven-levenscyclus, maar voor dit artikel is het belangrijk om te weten dat Maven:

  1. Negeer tests
  2. Compileer tests
  3. Voer tests uit

In onze voorbeelden gebruiken we de pakket fase, die het compileren en uitvoeren van de tests omvat. De opties die in deze tutorial worden onderzocht, behoren tot de Maven Surefire Plugin.

3. Commandoregelvlaggen gebruiken

3.1. De testcompilatie overslaan

Laten we eerst eens kijken naar een voorbeeld van een test die niet compileert:

@Test openbare ongeldig thisDoesntCompile () {baeldung; }

Wanneer we de opdrachtregelopdracht uitvoeren:

mvn-pakket

We krijgen een foutmelding:

[INFO] ----------------------------------------------- -------------- [FOUT] COMPILATIEFOUT: [INFO] --------------------------- ---------------------------------- [FOUT] / Users / baeldung / skip-tests / src / test / java / com / antmordel / skiptests / PowServiceTest.java: [11,9] geen instructie [INFO] 1 fout

Laten we daarom onderzoeken hoe u de compilatiefase overslaat voor de bronnen van de test. In Maven kunnen we de maven.test.skip vlag:

mvn -Dmaven.test.skip-pakket

Als gevolg hiervan worden de testbronnen niet gecompileerd en daarom niet uitgevoerd.

3.2. De testuitvoering overslaan

Laten we als tweede optie eens kijken hoe we kunnen de testmap compileren, maar slaan het run-proces over. Dit is handig voor die gevallen waarin we de handtekening van de methoden of klassen niet wijzigen, maar de bedrijfslogica hebben gewijzigd en als gevolg daarvan de tests hebben verbroken. Laten we eens kijken naar een gekunstelde testcase zoals hieronder, die altijd zal mislukken:

@Test public void thisTestFails () {fail ("Dit is een mislukte testcase"); }

Omdat we de verklaring hebben opgenomen mislukken (), als we het pakket fase, zal de build mislukken met de fout:

[ERROR] Storingen: [ERROR] PowServiceTest.thisTestFails: 16 Dit is een mislukte testcase [INFO] [ERROR] Tests uitgevoerd: 2, storingen: 1, fouten: 0, overgeslagen: 0

Laten we ons voorstellen dat we het uitvoeren van de tests willen overslaan, maar dat we ze toch willen compileren. In dit geval kunnen we de -DskipTests vlag:

mvn -DskipTests-pakket

en de pakketfase zal slagen. Ook is er in Maven een speciale plug-in om integratietests uit te voeren, de zogenaamde maven failsafe-plug-in. De -DskipTests zal de uitvoering van zowel unit tests (surefire) als integratietests (failsafe) overslaan. Om de integratietests gewoon over te slaan, kunnen we slagen voor het -DskipITs systeemeigenschap.

Ten slotte is het vermeldenswaard dat de nu verouderde vlag -Dmaven.test.skip.exec zal ook de testklassen compileren, maar zal ze niet uitvoeren.

4. Maven-configuratie gebruiken

In het geval dat we het compileren of het uitvoeren van de tests voor een langere periode moeten uitsluiten, kunnen we het pom.xml bestand om de juiste configuratie op te nemen.

4.1. De testcompilatie overslaan

Laten we, zoals we in de vorige sectie hebben gedaan, onderzoeken hoe we kunnen compileren vermijden de testmap. In dit geval gebruiken we de pom.xml het dossier. Laten we de volgende eigenschap toevoegen:

 waar 

Houd daar rekening mee we kunnen die waarde overschrijven door de tegenovergestelde vlag op de opdrachtregel toe te voegen:

mvn -Dmaven.test.skip = vals pakket

4.2. De testuitvoering overslaan

Laten we nogmaals, als tweede stap, onderzoeken hoe we kunnen de testmap bouwen, maar de testuitvoering overslaan met behulp van de Maven-configuratie. Om dat te doen, moeten we de Maven Surefire Plugin configureren met een eigenschap:

 true org.apache.maven.plugins maven-surefire-plugin 2.22.1 $ {tests.skip} 

Het eigendom van Maven tests.skip is een aangepaste eigenschap die we eerder hebben gedefinieerd. Daarom kunnen we het overschrijven als we de tests willen uitvoeren:

mvn -Dtests.skip = false pakket

4. Conclusie

In deze korte tutorial hebben we alle alternatieven onderzocht die Maven biedt om het compileren en / of het uitvoeren van tests over te slaan.

We hebben de Maven-opdrachtregelopties en de Maven-configuratieopties doorgenomen.