Costruisci un barattolo con Maven e ignora i risultati del test

1. Introduzione

Questa guida rapida mostra come costruire un vaso con Maven ignorando i risultati del test.

Per impostazione predefinita, Maven esegue gli unit test automaticamente durante la creazione del progetto. Tuttavia, ci sono rari casi in cui i test possono essere saltati e dobbiamo costruire il progetto indipendentemente dai risultati del test.

2. Costruzione del progetto

Creiamo un semplice progetto in cui includiamo anche un piccolo test case:

public class TestFail { @Test public void whenMessageAssigned_thenItIsNotNull() { String message = "hello there"; assertNotNull(message); } }

Creiamo un file jar eseguendo il seguente comando Maven:

mvn package

Ciò comporterà la compilazione dei sorgenti e la generazione di un file maven-0.0.1-SNAPSHOT.jar nella directory / target.

Ora, cambiamo un po 'il test, quindi il test inizia a fallire.

@Test public void whenMessageAssigned_thenItIsNotNull() { String message = null; assertNotNull(message); }

Questa volta, quando proviamo di nuovo a eseguire il comando mvn package , la compilazione fallisce e il file maven-0.0.1-SNAPSHOT.jar non viene creato.

Ciò significa che, se abbiamo un test non riuscito nella nostra applicazione, non possiamo fornire un file eseguibile a meno che non correggiamo il test.

Allora come possiamo risolvere questo problema?

3. Argomenti Maven

Maven ha i suoi argomenti per affrontare questo problema:

  • -Dmaven.test.failure.ignore = true ignora qualsiasi errore che si verifica durante l'esecuzione del test
  • -Dmaven.test.skip = true non compilerebbe i test
  • -fn , -fae non fallisce mai la compilazione indipendentemente dai risultati del test

Corriamo il mvn pacchetto -Dmaven.test.skip = true comando e vedere i risultati:

[INFO] Tests are skipped. [INFO] BUILD SUCCESS

Ciò significa che il progetto verrà costruito senza compilare i test.

Ora eseguiamo il pacchetto mvn -Dmaven.test.failure.ignore = true command:

[INFO] Running testfail.TestFail [ERROR] whenMessageAssigned_thenItIsNotNull java.lang.AssertionError [INFO] BUILD SUCCESS

Il nostro unit test fallisce in base all'asserzione ma la compilazione ha esito positivo.

Infine, testiamo le opzioni -fn , -fae . Entrambi i comandi package -fn e package -fae creano il file jar e producono l' output BUILD SUCCESS indipendentemente da quando il testMessageAssigned_thenItIsNotNull () fallisce.

In caso di progetto multi-modulo, dovrebbe essere usata l'opzione -fn . -fae continua con il modulo che ha un test fallito ma salta tutti i moduli dipendenti.

4. Plugin Maven Surefire

Un altro modo conveniente per raggiungere il nostro obiettivo è utilizzare il plug-in Surefire di Maven.

Per una panoramica estesa del plug-in Surefire, fare riferimento a questo articolo.

Per ignorare il test fallito possiamo semplicemente impostare la proprietà testFailureIgnore su true :

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

Vediamo ora l'output del comando package :

[INFO] T E S T S [INFO] Running testfail.TestFail [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, <<< FAILURE! - in testfail.TestFail

Dall'output dei test in esecuzione, possiamo vedere che la classe TestFail non riesce. Ma guardando oltre vediamo che è presente anche il messaggio BUILD SUCCESS e viene compilato il file maven-0.0.1-SNAPSHOT.jar.

A seconda delle nostre necessità, possiamo saltare l'esecuzione dei test. Per questo possiamo sostituire la riga testFailureIgnore con:

true

Oppure imposta l'argomento della riga di comando -DskipTests . Questo compilerà le classi di test ma salterà completamente l'esecuzione del test.

5. conclusione

In questo articolo, abbiamo imparato come costruire il nostro progetto con Maven indipendentemente dai risultati del test . Abbiamo esaminato gli esempi pratici di saltare i test falliti o escludere completamente la compilazione dei test.

Come al solito, il codice completo per questo articolo è disponibile sul progetto GitHub.