Come faccio a far funzionare i miei test di Maven Integration

Ho un progetto multi-modulo di maven2 e in ciascuno dei miei moduli figlio ho test JUnit che sono denominati rispettivamente Test.java e Integration.java per i test unitari e di integrazione. Quando eseguo:

mvn test

tutti i test JUnit *Test.java all’interno dei moduli figlio vengono eseguiti. Quando eseguo

mvn test -Dtest=**/*Integration

nessuno dei test di Integration.java viene eseguito all’interno dei moduli figlio.

Questi mi sembrano esattamente lo stesso, ma quello con l’ opzione -Dest = / * ** non funziona visualizza 0 test eseguiti a livello di genitore, che non ci sono test

Puoi configurare Maven’s Surefire per eseguire separatamente test unitari e test di integrazione. Nella fase di test dell’unità standard esegui tutto ciò che non corrisponde a un test di integrazione. Quindi si crea una seconda fase di test che esegue solo i test di integrazione.

Ecco un esempio:

   org.apache.maven.plugins maven-surefire-plugin   **/*IntegrationTest.java     integration-test  test  integration-test   none   **/*IntegrationTest.java      

Il ciclo di vita del build Maven ora include la fase di “test di integrazione” per l’esecuzione di test di integrazione, che vengono eseguiti separatamente dai test dell’unità eseguiti durante la fase di “test”. Funziona dopo “pacchetto”, quindi se si esegue “mvn verify”, “mvn install” o “mvn deploy”, i test di integrazione verranno eseguiti lungo il percorso.

Per impostazione predefinita, il test di integrazione esegue classi di test denominate **/IT*.java , **/*IT.java e **/*ITCase.java , ma è ansible configurarle.

Per i dettagli su come colbind tutto questo, vedi il plugin Failsafe , la pagina di utilizzo di Failsafe (non collegata correttamente dalla pagina precedente mentre scrivo questo), e controlla anche questo post del blog Sonatype .

Ho fatto ESATTAMENTE quello che vuoi fare e funziona alla grande. I test unitari “* Test” vengono sempre eseguiti e “* IntegrationTests” viene eseguito solo quando si esegue una verifica mvn o l’installazione mvn. Eccolo il frammento del mio POM. serg10 ha quasi avuto ragione … ma non del tutto.

    org.apache.maven.plugins maven-surefire-plugin   true  false    unit-tests test  test    false   **/*Tests.java    **/*IntegrationTests.java     integration-tests integration-test  test    false   **/*IntegrationTests.java      

In bocca al lupo!

Puoi dividerli molto facilmente usando le categorie JUnit e Maven.
Questo è mostrato molto, molto brevemente di seguito suddivisione dei test di unità e integrazione.

Definisci un’interfaccia marcatore

Il primo passo nel raggruppare un test usando le categorie è creare un’interfaccia marcatore.
Questa interfaccia verrà utilizzata per contrassegnare tutti i test che si desidera eseguire come test di integrazione.

 public interface IntegrationTest {} 

Segna le tue classi di test

Aggiungi l’annotazione di categoria all’inizio della tua class di test. Prende il nome della tua nuova interfaccia.

 import org.junit.experimental.categories.Category; @Category(IntegrationTest.class) public class ExampleIntegrationTest{ @Test public void longRunningServiceTest() throws Exception { } } 

Configura i test dell’unità Maven

La bellezza di questa soluzione è che nulla cambia per il lato unità di prova delle cose.
Semplicemente aggiungiamo alcune configurazioni al plugin maven surefire per farlo ignorare qualsiasi test di integrazione.

  org.apache.maven.plugins maven-surefire-plugin 2.11   **/*.class   com.test.annotation.type.IntegrationTest    

Quando esegui un test mvn clean, verranno eseguiti solo i test unitari non contrassegnati.

Configura i test di integrazione di Maven

Di nuovo la configurazione per questo è molto semplice.
Utilizziamo il plug-in standard sicuro e lo configuriamo per eseguire solo i test di integrazione.

  org.apache.maven.plugins maven-failsafe-plugin 2.19.1   **/*.class   com.test.annotation.type.IntegrationTest    

La configurazione utilizza un objective di esecuzione standard per eseguire il plug-in failsafe durante la fase di test di integrazione della build.

Ora puoi fare un’installazione mvn clean
Questa volta, unitamente ai test dell’unità in esecuzione, i test di integrazione vengono eseguiti durante la fase di test di integrazione.

Dovresti provare a usare il plugin Maven failsafe . Puoi dire di includere un certo insieme di test.

Per impostazione predefinita, Maven esegue solo test che hanno eseguito Test da qualche parte nel nome della class.

Rinominare in IntegrationTest e probabilmente funzionerà.

In alternativa puoi cambiare la configurazione di Maven per includere quel file, ma probabilmente è più facile e meglio solo nominare i tuoi test SomethingTest.

Da inclusioni ed esclusioni di test :

Per impostazione predefinita, il plugin Surefire includerà automaticamente tutte le classi di test con i seguenti modelli jolly:

  • “** / Test * .java” – include tutta la sua sottodirectory e tutti i nomi di file java che iniziano con “Test”.
  • “** / * Test.java” – include tutta la sua sottodirectory e tutti i nomi di file java che terminano con “Test”.
  • “** / * TestCase.java” – include tutta la sua sottodirectory e tutti i nomi di file java che terminano con “TestCase”.

Se le classi di test non sono conformi alla convenzione di denominazione, configurare Surefire Plugin e specificare i test che si desidera includere.

Un altro modo di eseguire i test di integrazione con Maven consiste nell’utilizzare la funzione del profilo:

 ...    org.apache.maven.plugins maven-surefire-plugin   **/*Test.java   **/*IntegrationTest.java        integration-tests    org.apache.maven.plugins maven-surefire-plugin   **/*IntegrationTest.java   **/*StagingIntegrationTest.java        ... 

L’esecuzione di ‘mvn clean install’ eseguirà la build predefinita. Come specificato sopra, i test di integrazione saranno ignorati. L’esecuzione di ‘mvn clean install -P integration-tests’ includerà i test di integrazione (ignoro anche i miei test di integrazione dello staging). Inoltre, ho un server CI che esegue i miei test di integrazione ogni notte e per questo comando il comando ‘mvn test -P integration-tests’ .

È ansible seguire la documentazione di Maven per eseguire i test unitari con la build ed eseguire separatamente i test di integrazione.

   true  [...]    org.apache.maven.plugins maven-failsafe-plugin 2.20.1  ${skipTests}     [...]  

Ciò ti consentirà di eseguire tutti i test di integrazione disabilitati per impostazione predefinita. Per eseguirli, usi questo comando:

 mvn install -DskipTests=false