Anda dapat membaginya dengan sangat mudah menggunakan kategori JUnit dan Maven.
Ini ditunjukkan sangat, sangat singkat di bawah ini dengan pemisahan unit dan tes integrasi.
Tentukan Antarmuka Penanda
Langkah pertama dalam mengelompokkan tes menggunakan kategori adalah membuat antarmuka penanda.
Antarmuka ini akan digunakan untuk menandai semua tes yang ingin Anda jalankan sebagai tes integrasi.
public interface IntegrationTest {}
Tandai kelas tes Anda
Tambahkan anotasi kategori ke bagian atas kelas tes Anda. Dibutuhkan nama antarmuka baru Anda.
import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{
@Test
public void longRunningServiceTest() throws Exception {
}
}
Konfigurasikan Tes Unit Maven
Keindahan dari solusi ini adalah tidak ada yang benar-benar berubah untuk sisi pengujian unit.
Kami cukup menambahkan beberapa konfigurasi ke plugin maven surefire untuk membuatnya mengabaikan semua tes integrasi.
<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>
Ketika Anda melakukan tes bersih mvn hanya tes unit tanpa tanda Anda akan berjalan.
Konfigurasikan Tes Integrasi Maven
Sekali lagi konfigurasi untuk ini sangat sederhana.
Untuk menjalankan hanya tes integrasi, gunakan ini:
<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>
Jika Anda membungkus ini dalam profil dengan id IT
, Anda hanya dapat menjalankan tes cepat menggunakan mvn clean install
. Untuk menjalankan hanya tes integrasi / lambat, gunakan mvn clean install -P IT
.
Tetapi paling sering, Anda ingin menjalankan tes cepat secara default dan semua tes dengan -P IT
. Jika itu masalahnya, maka Anda harus menggunakan trik:
<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>
Seperti yang Anda lihat, saya mengecualikan tes yang dijelaskan dengan java.io.Serializable
. Ini diperlukan karena profil akan mewarisi konfigurasi default plugin Surefire, jadi meskipun Anda mengatakan <excludedGroups/>
atau <excludedGroups></excludedGroups>
, nilainya com.test.annotation.type.IntegrationTest
akan digunakan.
Anda juga tidak dapat menggunakan none
karena harus berupa antarmuka di classpath (Maven akan memeriksa ini).
Catatan:
- Ketergantungan ke
surefire-junit47
hanya diperlukan ketika Maven tidak beralih ke pelari JUnit 4 secara otomatis. Menggunakan elemen groups
atau excludedGroups
harus memicu sakelar. Lihat di sini .
- Sebagian besar kode di atas diambil dari dokumentasi untuk plugin Maven Failsafe. Lihat bagian "Menggunakan Kategori JUnit" di halaman ini .
- Selama pengujian saya, saya menemukan bahwa ini bahkan berfungsi ketika Anda menggunakan
@RunWith()
anotasi untuk menjalankan suite atau tes berbasis pegas.