JUnit kategorilerini ve Maven'i kullanarak bunları çok kolay bir şekilde bölebilirsiniz.
Bu, aşağıda bölme birimi ve entegrasyon testleri ile çok, çok kısaca gösterilmiştir.
Bir Marker Arayüzü Tanımlayın
Kategorileri kullanarak bir testi gruplandırmanın ilk adımı, bir işaretleyici arabirimi oluşturmaktır.
Bu arayüz, çalıştırılmasını istediğiniz tüm testleri entegrasyon testleri olarak işaretlemek için kullanılacaktır.
public interface IntegrationTest {}
Test sınıflarınızı işaretleyin
Kategori açıklamasını test sınıfınızın en üstüne ekleyin. Yeni arayüzünüzün adını alır.
import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{
@Test
public void longRunningServiceTest() throws Exception {
}
}
Maven Birim Testlerini Yapılandırın
Bu çözümün güzelliği, şeylerin birim testi tarafında gerçekten hiçbir şeyin değişmemesidir.
Herhangi bir entegrasyon testini göz ardı etmesini sağlamak için maven surefire eklentisine bazı konfigürasyonlar ekliyoruz.
<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>
Bir mvn temizleme testi yaptığınızda, yalnızca işaretlenmemiş birim testleriniz çalışacaktır.
Maven Entegrasyon Testlerini Yapılandırın
Yine bunun için konfigürasyon çok basit.
Yalnızca entegrasyon testlerini çalıştırmak için şunu kullanın:
<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>
Bunu kimliğiyle bir profile sararsanız IT
, yalnızca kullanarak hızlı testleri çalıştırabilirsiniz mvn clean install
. Yalnızca entegrasyon / yavaş testleri çalıştırmak için mvn clean install -P IT
.
Ancak çoğu zaman, hızlı testleri varsayılan olarak ve tüm testleri ile çalıştırmak isteyeceksiniz -P IT
. Durum buysa, bir numara kullanmanız gerekir:
<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>
Gördüğünüz gibi, ile not verilen testleri hariç tutuyorum java.io.Serializable
. Profil, Surefire eklentisinin varsayılan yapılandırmasını devralacağı için bu gereklidir, bu nedenle <excludedGroups/>
veya deseniz bile <excludedGroups></excludedGroups>
değer com.test.annotation.type.IntegrationTest
kullanılacaktır.
Ayrıca none
, sınıf yolunda bir arayüz olması gerektiğinden de kullanamazsınız (Maven bunu kontrol edecektir).
Notlar:
- Bağımlılık
surefire-junit47
yalnızca Maven JUnit 4 çalıştırıcısına otomatik olarak geçmediğinde gereklidir. Kullanılması groups
veya excludedGroups
eleman anahtarını tetikler. Buraya bakın .
- Yukarıdaki kodun çoğu, Maven Failsafe eklentisinin belgelerinden alınmıştır. Bu sayfadaki "JUnit Kategorilerini Kullanma" bölümüne bakın .
- Testlerim sırasında,
@RunWith()
paketleri veya Bahar tabanlı testleri çalıştırmak için ek açıklamaları kullandığınızda bile bunun işe yaradığını gördüm .