Puoi dividerli molto facilmente usando le categorie JUnit e Maven.
Ciò è mostrato molto, molto brevemente di seguito dalla divisione dell'unità e dai test di integrazione.
Definire un'interfaccia marker
Il primo passo nel raggruppare un test usando le categorie è creare un'interfaccia marker.
Questa interfaccia verrà utilizzata per contrassegnare tutti i test che si desidera eseguire come test di integrazione.
public interface IntegrationTest {}
Segna le tue lezioni di prova
Aggiungi l'annotazione di categoria all'inizio della classe 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 {
}
}
Configurare i test dell'unità Maven
Il bello di questa soluzione è che nulla cambia davvero per il lato unit test delle cose.
Aggiungiamo semplicemente un po 'di configurazione al plugin maven surefire per farlo ignorare qualsiasi test di integrazione.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.12</version>
</dependency>
</dependencies>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
<excludedGroups>com.test.annotation.type.IntegrationTest</excludedGroups>
</configuration>
</plugin>
Quando si esegue un test mvn clean, verranno eseguiti solo i test unitari non contrassegnati.
Configurare i test di integrazione Maven
Ancora una volta la configurazione per questo è molto semplice.
Per eseguire solo i test di integrazione, utilizzare questo:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.12</version>
</dependency>
</dependencies>
<configuration>
<groups>com.test.annotation.type.IntegrationTest</groups>
</configuration>
</plugin>
Se lo avvolgi in un profilo con ID IT
, puoi eseguire solo i test rapidi utilizzando mvn clean install
. Per eseguire solo i test di integrazione / lente, utilizzare mvn clean install -P IT
.
Ma molto spesso, vorrai eseguire i test veloci per impostazione predefinita e tutti i test con -P IT
. In tal caso, devi usare un trucco:
<profiles>
<profile>
<id>IT</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludedGroups>java.io.Serializable</excludedGroups> <!-- An empty element doesn't overwrite, so I'm using an interface here which no one will ever use -->
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Come puoi vedere, escludo i test annotati java.io.Serializable
. Ciò è necessario perché il profilo erediterà la configurazione predefinita del plug-in Surefire, quindi anche se dici <excludedGroups/>
o <excludedGroups></excludedGroups>
, com.test.annotation.type.IntegrationTest
verrà utilizzato il valore .
Inoltre non è possibile utilizzare none
poiché deve essere un'interfaccia sul percorso di classe (Maven verificherà questo).
Appunti:
- La dipendenza da
surefire-junit47
è necessaria solo quando Maven non passa automaticamente al corridore JUnit 4. L'uso dell'elemento groups
o excludedGroups
dovrebbe attivare l'interruttore. Vedi qui .
- La maggior parte del codice sopra è stato preso dalla documentazione per il plugin Maven Failsafe. Vedere la sezione "Uso delle categorie JUnit" in questa pagina .
- Durante i miei test, ho scoperto che funziona anche quando usi le
@RunWith()
annotazioni per eseguire suite o test basati su Spring.