Możesz je bardzo łatwo podzielić za pomocą kategorii JUnit i Maven.
Pokazano to bardzo, bardzo krótko poniżej, dzieląc testy jednostkowe i integracyjne.
Zdefiniuj interfejs znacznika
Pierwszym krokiem w grupowaniu testu za pomocą kategorii jest utworzenie interfejsu znaczników.
Ten interfejs będzie używany do oznaczania wszystkich testów, które chcesz uruchomić, jako testy integracji.
public interface IntegrationTest {}
Zaznacz swoje klasy testowe
Dodaj adnotację kategorii na początku klasy testowej. Przyjmuje nazwę nowego interfejsu.
import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{
@Test
public void longRunningServiceTest() throws Exception {
}
}
Skonfiguruj testy jednostkowe Maven
Piękno tego rozwiązania polega na tym, że nic tak naprawdę nie zmienia się po stronie testów jednostkowych.
Po prostu dodajemy konfigurację do wtyczki maven surefire, aby ignorowała wszelkie testy integracji.
<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>
Kiedy wykonujesz czysty test mvn, zostaną uruchomione tylko nieoznakowane testy jednostkowe.
Skonfiguruj testy integracji Maven
Ponownie konfiguracja tego jest bardzo prosta.
Aby uruchomić tylko testy integracji, użyj tego:
<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>
Jeśli umieścisz to w profilu o identyfikatorze IT
, możesz uruchomić tylko szybkie testy przy użyciu mvn clean install
. Aby uruchomić tylko integrację / wolne testy, użyj mvn clean install -P IT
.
Ale najczęściej będziesz chciał domyślnie uruchamiać szybkie testy, a wszystkie testy z -P IT
. W takim przypadku musisz użyć sztuczki:
<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>
Jak widać, wykluczam testy z adnotacją java.io.Serializable
. Jest to konieczne, ponieważ profil odziedziczy domyślną konfigurację wtyczki Surefire, więc nawet jeśli powiesz <excludedGroups/>
lub <excludedGroups></excludedGroups>
, wartość com.test.annotation.type.IntegrationTest
zostanie użyta.
Nie możesz również użyć, none
ponieważ musi to być interfejs na ścieżce klas (Maven to sprawdzi).
Uwagi:
- Zależność od
surefire-junit47
jest konieczna tylko wtedy, gdy Maven nie przełącza się automatycznie na biegacz JUnit 4. Użycie elementu groups
lub excludedGroups
powinno wywołać przełącznik. Zobacz tutaj .
- Większość powyższego kodu pochodzi z dokumentacji wtyczki Maven Failsafe. Zobacz sekcję „Korzystanie z kategorii JUnit” na tej stronie .
- Podczas moich testów odkryłem, że działa to nawet, gdy używasz
@RunWith()
adnotacji do uruchamiania pakietów lub testów opartych na Spring.