2013-01-10 13 views
5

Her JUnit testini çalıştırmadan önce bir işlem yapmam gereken proje üzerinde çalışıyorum. Bu sorun, JUnit çekirdeğine eklenebilecek RunListener kullanılarak çözüldü. Proje montaj Maven'i kullanılarak yapılır, bu yüzden pom dosyasında bu satırları edilir: testler intellij kullanmaya başladıktan zaman (iç testi kullanılarakJUnit RunListener'ı IntelliJ IDEA'da Kullanma

mvn clean test 

Ama:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.12</version> 
      <configuration> 
       <properties> 
        <property> 
         <name>listener</name> 
         <value>cc.redberry.core.GlobalRunListener</value> 
        </property> 
       </properties> 
      </configuration> 
     </plugin> 

Böylece, her şey kullanarak çalışır koşucu) bizim RunListener kodlu eylemler yürütülmez, bu nedenle IntelliJ altyapısını kullanarak test yapmak mümkün değildir.

Gördüğünüz gibi, IntelliJ bu yapılandırmayı pom dosyasından ayrıştırmıyor, bu nedenle IntelliJile JUnit çekirdeğine RunListener eklemesini açıkça belirtmenin bir yolu var mı? Yapılandırmada bazı VM seçenekleri kullanılıyor olabilir mi?

Güzel IntelliJ test ortamını maven çıktısını okumak yerine kullanmak daha uygundur.

P.S. Gerçekleştirmem gereken eylem temel olarak statik ortamın sıfırlanmasıdır (sınıflarımdaki bazı statik alanlar).

cevap

3

Intellij'de bir RunListener belirtmenin bir yolunu görmedim, ancak başka bir çözüm kendi müşteri Runner'ınızı yazmak ve testlerinizde @RunWith() öğesini eklemektir.

public class MyRunner extends BlockJUnit4ClassRunner { 
    public MyRunner(Class<?> klass) throws InitializationError { 
     super(klass); 
    } 

    @Override 
    protected void runChild(final FrameworkMethod method, RunNotifier notifier) { 
     // run your code here. example: 
     Runner.value = true;    

     super.runChild(method, notifier); 
    } 
} 

Numune statik değişkeni:

public class Runner { 
    public static boolean value = false; 
} 

O zaman bu gibi testleri:

@RunWith(MyRunner.class) 
public class MyRunnerTest { 
    @Test 
    public void testRunChild() { 
     Assert.assertTrue(Runner.value); 
    } 
} 

Bu, bir RunListener olmadan statik başlatma sağlayacaktır.

+0

Başka bir çözüm için teşekkür ederiz! Şimdi, tüm test derslerim için belirtilen '@ Before' yöntemiyle bir global ebeveyn eklemeyi düşünüyorum. Yani, her durumda tüm test dosyalarımı düzenleyeceğim. :(Bu özelliği eklemek için IntelliJ hata izleyicisinde bir bilet oluşturacağım. – dbolotin