Saltare i test con Maven

1. Introduzione

Saltare i test è spesso una cattiva idea. Tuttavia, ci sono alcune situazioni in cui potrebbe essere utile, forse quando stiamo sviluppando nuovo codice e vogliamo eseguire build intermedie in cui i test non vengono superati o compilati.

Solo in questo tipo di situazioni, potremmo saltare i test per evitare il sovraccarico di compilazione ed esecuzione. Ovviamente, considera che non eseguire i test può portare a cattive pratiche di codifica.

In questo rapido tutorial, esploreremo tutti i possibili comandi e opzioni per saltare i test utilizzando Maven .

2. Ciclo di vita di Maven

Prima di entrare nei dettagli su come saltare i test, dobbiamo capire quando i test vengono compilati o eseguiti . Nell'articolo sugli obiettivi e le fasi di Maven, approfondiamo il concetto del ciclo di vita di Maven, ma ai fini di questo articolo, è importante sapere che Maven può:

  1. Ignora i test
  2. Compilare i test
  3. Esegui test

Nei nostri esempi, useremo la fase del pacchetto , che include la compilazione e l'esecuzione dei test. Le opzioni esplorate in questo tutorial appartengono al plug-in Maven Surefire.

3. Utilizzo dei flag della riga di comando

3.1. Saltare la compilazione del test

Per prima cosa, diamo un'occhiata a un esempio di un test che non si compila:

@Test public void thisDoesntCompile() { baeldung; }

Quando eseguiamo il comando della riga di comando:

mvn package

Otterremo un errore:

[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

Pertanto, esploriamo come saltare la fase di compilazione per i sorgenti del test. In Maven, possiamo usare il flag maven.test.skip :

mvn -Dmaven.test.skip package

Di conseguenza, i sorgenti di test non vengono compilati e, pertanto, non vengono eseguiti.

3.2. Saltare l'esecuzione del test

Come seconda opzione, vediamo come possiamo compilare la cartella di test ma saltare il processo di esecuzione . Questo è utile per quei casi in cui non stiamo cambiando la firma dei metodi o delle classi ma abbiamo cambiato la logica di business e, di conseguenza, abbiamo rotto i test. Consideriamo un caso di test artificioso come quello qui sotto, che fallirà sempre:

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

Poiché abbiamo incluso l'istruzione fail () , se eseguiamo la fase del pacchetto , la compilazione fallirà con l'errore:

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

Immaginiamo di voler saltare l'esecuzione dei test ma comunque di volerli compilare. In questo caso, possiamo usare il flag -DskipTests :

mvn -DskipTests package

e la fase del pacchetto avrà successo. Inoltre, in Maven, c'è un plug-in dedicato per eseguire test di integrazione chiamato plug-in di sicurezza maven. I -DskipTests salterà l'esecuzione di entrambi i test unitari (infallibile) e test di integrazione (fail-safe). Per saltare solo i test di integrazione, possiamo passare la proprietà di sistema -DskipITs .

Infine, vale la pena ricordare che il flag ormai deprecato -Dmaven.test.skip.exec compilerà anche le classi di test ma non le eseguirà.

4. Utilizzo della configurazione Maven

Nel caso in cui dovessimo escludere la compilazione o l'esecuzione dei test per un periodo di tempo più lungo, possiamo modificare il file pom.xml in modo da includere la corretta configurazione.

4.1. Saltare la compilazione del test

Come abbiamo fatto nella sezione precedente, esaminiamo come evitare di compilare la cartella di test. In questo caso, useremo il file pom.xml . Aggiungiamo la seguente proprietà:

 true 

Tieni presente che possiamo sovrascrivere quel valore aggiungendo il flag opposto nella riga di comando :

mvn -Dmaven.test.skip=false package

4.2. Saltare l'esecuzione del test

Ancora una volta, come secondo passaggio, esploriamo come possiamo costruire la cartella del test ma saltare l'esecuzione del test utilizzando la configurazione di Maven. Per fare ciò, dobbiamo configurare il plug-in Maven Surefire con una proprietà:

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

La proprietà Maven tests.skip è una proprietà personalizzata che abbiamo definito in precedenza. Pertanto, possiamo sovrascriverlo se vogliamo eseguire i test:

mvn -Dtests.skip=false package

4. Conclusione

In questo breve tutorial, abbiamo esplorato tutte le alternative che Maven offre per saltare la compilazione e / o l'esecuzione dei test.

Abbiamo esaminato le opzioni della riga di comando di Maven e le opzioni di configurazione di Maven.