2013-02-08 17 views
5

Test grubu yürütme süresinin tamamı boyunca çalışmak istediğim bir Grizzly HttpServer var. Ayrıca, global HttpServer örneğiyle, sınamaların kendileriyle bir @Rule arasında etkileşim kurmak istiyorum.Tüm testlerden önce ve sonra çalıştırma testi başarılı bir şekilde yürütülüyor

JUnit test paketlerini kullanmak yerine Maven Surefire kullanıyorum, test paketinin kendisinde @BeforeClass/@AfterClass kullanamıyorum.

Şu anda aklıma gelen herkesin bir statik alan başlatması ve sunucuyu Runtime.addShutdownHook() durdurması - güzel değil!

+0

geliyor? – TheWhiteRabbit

+0

POJO veya TestNG testlerini kullanıyorsanız, @BeforeClass – TheWhiteRabbit

+0

@TechExchange'i kullanabilirsiniz. Güncellenmiş soru maven surefire – hertzsprung

cevap

7

İki seçenek vardır, bir maven çözümü ve kesin bir çözüm. En az birleşik çözüm, bir eklentiyi pre-integration-test ve post-integration-test fazında yürütmektir. Bakınız Introduction to the Build Lifecycle - Lifecycle Reference. Ben grizzly aşina değilim, ama burada bir örnek kullanarak dalgakıran: start için faz pre-integration-test ve stoppost-integration-test olduğunu olduğunu

<build> 
    <plugins> 
    <plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>maven-jetty-plugin</artifactId> 
    <configuration> 
    <contextPath>/xxx</contextPath> 
    </configuration> 
    <executions> 
    <execution> 
     <id>start-jetty</id> 
     <phase>pre-integration-test</phase> 
     <goals> 
     <goal>run</goal> 
     </goals> 
     <configuration> 
     </configuration> 
    </execution> 
    <execution> 
     <id>stop-jetty</id> 
     <phase>post-integration-test</phase> 
     <goals> 
     <goal>stop</goal> 
     </goals> 
    </execution> 
    </executions> 
    </plugin> 

Not. Bir grizzly maven eklentisi olup olmadığından emin değilim, ancak bunun yerine maven-antrun-plugin'u kullanabilirsiniz.

İkinci seçenek bir JUnit RunListener kullanmaktır. RunListener Yani RunStarted ve RunFinished dinlemek olabilir vb

public class RunListener { 
    public void testRunStarted(Description description) throws Exception {} 
    public void testRunFinished(Result result) throws Exception {} 
    public void testStarted(Description description) throws Exception {} 
    public void testFinished(Description description) throws Exception {} 
    public void testFailure(Failure failure) throws Exception {} 
    public void testAssumptionFailure(Failure failure) {} 
    public void testIgnored(Description description) throws Exception {} 
} 

Test başlangıcında test sonunda test yetmezliği, deney başarı olarak olayları sınamak dinler. Bunlar istediğiniz hizmetleri başlatacak/durduracaktır. Sonra güzelliğinde de, kullandığınız özel bir dinleyici belirtebilirsiniz:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.10</version> 
    <configuration> 
    <properties> 
     <property> 
     <name>listener</name> 
     <value>com.mycompany.MyResultListener,com.mycompany.MyResultListener2</value> 
     </property> 
    </properties> 
    </configuration> 
</plugin> 

Bu jUnit değilse kullandığınız bir Maven Surefire Plugin, Using JUnit, Using custom listeners and reporters

+0

kullandığımı açıklamak için güncelleştirildi. İlk seçeneğin işe yaramayacağını düşünüyorum çünkü "HttpServer" örneğine erişmem gerekiyor 'TestRule', ama 'RunListener' umut verici geliyor, teşekkürler! Benim için – hertzsprung

+0

, ön entegrasyon aşamasının bir parçası olarak, jetty sunucusu başlatılıyor. Son günlük satırı: [INFO] Jetty Server'ı başlattı. Bundan sonra hiçbir şey olmaz. Takılıyor. maven surefire failsafe eklentisi testleri yürütmez ve iskelet sunucusu durmaz. Neyin var? Sizinle belirtilen aynı yapılandırmayı kullanıyorum. –

İlgili konular