Junit: bölme entegrasyon test ve Birim testleri
Junit test yükü bana miras kaldı, ama bu testler dışında (çoğu çalışmıyor) gerçek birim test ve entegrasyon testlerini (dış sistemleri, db vb gerektiren bir karışım elde edilir.
Birim test güzel ve çabuk bir şekilde aslında onları ayırmak için düşünmeye çalışıyorum ve entegrasyon ondan sonra testleri.
Seçenekleri..
Ayrı bir dizin içine bölünmüş.
Junit4 (v3) hareket sınıfların ayrı açıklama.
Dosya adlandırma kuralı bir sınıf olduğunu anlatmak için kullanmak , yani AdapterATest ve AdapterAİntergrationTest.
3 Tutulması için bu seçeneği sorunu vardır "seçilen proje/paketinde tüm testleri ya da". Çalıştır klasör Çok zor sadece entegrasyon testleri çalıştırmak için yapar.
2: geliştiriciler birim test sınıfları entegrasyon testleri yazmaya başlayabilir ve sadece dağınık alır riskini taşır.
Etkileyicisi çözüm gibi Görünüyor, ama içimden bir ses daha iyi bir çözüm olmalı diyor. 1:
Benim soru yani, ne kadar çok test entegrasyonu ve uygun ünite testleri parçalayın mı?
CEVAP
Onları çok kolay JUnit kategoriler ve Maven kullanarak bölebilirsiniz.
Bu çok, çok kısaca aşağıda bölme birim ve entegrasyon testleri ile gösterilir.
Marker Bir Arabirim Tanımlar
Bir test kategorilerini kullanarak gruplandırma ilk adımı marker bir arayüz oluşturmaktır.
Bu arayüz entegrasyon testleri çalıştırmak istediğiniz testleri tüm işaretlemek için kullanılır.
public interface IntegrationTest {}
Test sınıfları Mark
Kategori test sınıf üstüne ek açıklama ekleyin. Yeni arabirimin adını alır.
import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{
@Test
public void longRunningServiceTest() throws Exception {
}
}
Yapılandırma Maven Birim Testleri
Bu çözümün güzelliği, hiçbir şey gerçekten bu işleri birim test taraf için de değişmesidir.
Biz sadece surefire maven Eklentisi için bazı yapılandırma herhangi bir entegrasyon testleri görmezden gelmeye devam edin.
<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>
Mvn clean testi yaptığınızda sadece isimsiz birim testleri çalışacaktır.
Yapılandırma Entegrasyon Testleri Maven
Yine bu yapılandırma çok basittir.
Sadece entegrasyon testi yapmak için bunu 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>
Sen kimliÄŸi IT
, bir profil, bu işi sadece hızlı test mvn clean install
kullanarak çalıştırabilirsiniz. Sadece entegrasyon çalıştırmak için yavaş testleri/, mvn clean install -P IT
.
Fakat çoğu zaman, varsayılan olarak hızlı testler yapmak isteyecektirtüm-P IT
ile test eder. EÄŸer durum buysa, o zaman bir hile kullanmak zorunda:
<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, java.io.Serializable
ile açıklamalı testler hariç değilim. Bu Profili <excludedGroups/>
<excludedGroups></excludedGroups>
deÄŸer com.test.annotation.type.IntegrationTest
kullanılacak diyorsan bile varsayılan Surefire eklentinin config, yani miras için gereklidir.
Ayrıca sınıf (Maven bunu kontrol eder) bir arabirim de olacağı none
kullanamazsınız.
Notlar:
surefire-junit47
bağımlılık Maven JUnit 4 runner otomatik olarak geçiş değil sadece gereklidir.groups
excludedGroups
öğesini kullanarak anahtarı tetiklemek gerekir. See here.- Kodu en yukarıdaki Maven Hatasız eklenti belgelerine alınmıştır. Bkz: Bölüm "JUnit Kategorileri Kullanarak" on this page.
- Benim testler sırasında, bu bile
@RunWith()
ek açıklamalar suites çalıştırmak için kullandığınızda çalışır veya tabanlı bir Bahar testleri buldum.
Maven birim testleri önlemek ama enteg...
Entegrasyon ve birim testleri arasında...
Nasıl birim testleri yazarken test ne ...
JUnit testleri dinamik numarası ile te...
Birim test, Entegrasyon Testi, Duman t...