2012-03-28 25 views
30

Projemde tüm testlerden önce bazı depo kurulumlarını yapmak zorundayım. Bu, bazı zor statik kurallar kullanılarak yapılır. Ancak tüm testlerden sonra nasıl temizlik yapılacağına dair hiçbir fikrim yok. Her zaman devam ettirmem gereken tüm test yöntemlerinin sayısını gösteren sihirli bir statik sayı tutmak istemiyorum.Tüm testlerden sonra temizleme

En değerli yol, tüm testlerden sonra çağrılacak olan bazı dinleyicilerin eklenmesidir. JUnit4'te zaten bir arayüz var mı?


düzenleme: @AfterClass ile açıklamalı yöntem son kez çağrılır olmadığını bilmek zorunda çünkü bu, @BeforeClass ve @AfterClass ile ilgisi yoktur.

+0

gibi bir temiz ** TestNG ** çözüm burada bulunabilir: http://stackoverflow.com/a/26381858/1857897 – dedek

cevap

30

JUnit 4.9 kullanıyorum. Will bu yardım ?:

import junit.framework.TestCase; 

import org.junit.AfterClass; 
import org.junit.BeforeClass; 
import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 
import org.junit.runners.Suite.SuiteClasses; 

@RunWith(Suite.class) 
@SuiteClasses({First.class,Second.class,Third.class}) 
public class RunTestSuite extends TestCase { 
    @BeforeClass 
    public static void doYourOneTimeSetup() { 
     ... 
    } 

    @AfterClass 
    public static void doYourOneTimeTeardown() { 
     ... 
    }  
} 

Düzenleme: Oldukça olumlu duyuyorum benim çözüm Aradığınız ne olduğunu (Size soru yanlış anlamak sürece). Tüm testleriniz koştuktan sonra bir teardown yöntemi. Dinleyici gerekli değil, JUnit bu tesise sahip. Teşekkürler.

+1

Ben, bu hedefe ulaşmak olacaktır eminim Seninkini yanlış anlamak sürece soru. – HellishHeat

+6

Tüm test sınıflarını sıralamak zorundayım (ki şimdi birkaç tane bile var ve sayım hızla büyüyecek), bu yüzden ne yazık ki kabul edilemez –

+1

Üzgünüm, ne yapmaya çalıştığını bilmiyorum. Neden hiçbir şey numaralandırman gerektiğini bilmiyorum. Sorunuza daha fazla ayrıntı koymanızı öneririm, çünkü testlerinizin sonunda, testlerinizin sonunda bazı statik davranışlar olmasını istersiniz. Bu senin belirttiğin tek şey. Durum buysa, çözümüm bunu yapar. Her testinizden sonra AfterClass'ı çalıştırdığımı lütfen unutmayın. AllTests üzerindeki AfterClass ek açıklamasını kullanıyorum. SO, Tüm Testlerden sonra çağrılacaktır. Belki de anlamıyorum :) – HellishHeat

1

Özel TestRunner'ınızı her zaman yazabilirsiniz. Ancak, bunu yapmadan önce, aynı ihtiyacı değerlendirmeniz gerekir. @BeforeClass ve @AfterClass kullanmak daha iyidir. Gösterebileceğim başka bir örnek de, hazırda bekletmenin kullanıcıların 'import.sql' kullanarak birim testi yapmasına izin verdiği moda. JUnit java doc daha doğrudan

public class TestListener extends RunListener { 
    @Override 
    public void testRunStarted(Description description) throws Exception { 
    // Called before any tests have been run. 
    } 
    @Override 
    public void testRunFinished(Result result) throws Exception { 
    // Called when all tests have finished 
    } 
} 

Oku:

34

Ben org.junit.runner.notification.RunListener, örnek kullanmayı öneriyoruz. Hatta eklenti yapılandırması aşağıdaki kodu ekleyerek Maven'ın Surefire (birim testleri) eklentisi yada güvenli eklenti (entegrasyon testleri) ile kullanabiliriz:

<properties> 
    <property> 
    <name>listener</name> 
    <value>com.innovatrics.afismq.it.TestListener</value> 
    </property> 
</properties> 
+1

Bu çözümü çok daha iyi seviyorum. Tüm sınıfları adlandırmanız gerekmez – committedandroider

1

paketi kullanmak gerek olmaz, sadece @BeforeClass ve @AfterClass eklemek statik

public class Tests { 

    @BeforeClass 
    public static void doYourOneTimeSetup() 
    { 
     ... 
    } 

    @AfterClass 
    public static void doYourOneTimeTeardown() { 
     ... 
    }  

    @Test 
    public void testYourTestcase() 
    { 
     ... 
    } 
} 
+1

Birden fazla test sınıfınız varsa bu işe yaramaz. –

+0

evet, dersin kapsamındadır – serup

İlgili konular