SORU
9 NİSAN 2010, Cuma


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..

  1. Ayrı bir dizin içine bölünmüş.

  2. Junit4 (v3) hareket sınıfların ayrı açıklama.

  3. 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
30 NİSAN 2012, PAZARTESİ


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EvilControllers

    EvilControll

    20 Ocak 2008
  • Lamarr Wilson

    Lamarr Wilso

    27 Aralık 2008
  • Michael Zhang

    Michael Zhan

    8 EYLÜL 2012