2012-05-10 20 views
5

JUnit için Maven ile oldukça iyi çalışan basit bir RunListener yazdım. BenEclipse'de JUnit RunListener'ı nasıl kullanabilirim?

<properties> 
    <property> 
     <name>listener</name> 
     <value>com.asml.lcp.middleware.common.jboss.test.tps.TestDocumentationListener</value> 
    </property> 
</properties> 

aracılığıyla maven hata emniyeti-eklentisi için kaydetmek ve dinleyici doğru çıktı görebiliyordu.

Şimdi aynı RunListener'ı Eclipse'e kaydetmek istiyorum, testleri çalıştırdığımda aynı çıkışı görmek istiyorum.

Bu mümkün mü? Test amaçlı ve tutarlı olmak için aynı çıktıya sahip olmak güzel olurdu. Bu konuda daha fazla reseatr yaptım.

cevap

1

Evet, bu mümkün. Temel olarak kendi Runner'ınızı uygulamanız ve run yönteminin içinde, özel bir run dinleyici ekleyebilirsiniz. Ben this post yararlanırız, noktayı İşte 2.

düşündüm benim dinleyici

public class TestLogger extends RunListener 
{ 
    public void testFinished(Description description) 
    { 
     System.out.println("Successful " + description.getMethodName()); 
    } 
} 

ve burada benim Runner

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

    @Override 
    public void run(RunNotifier notifier) 
    { 
     notifier.addListener(new TestLogger()); // THIS IS THE IMPORTANT LINE 
     super.run(notifier); 
    } 
} 

ve burada benim asıl junit testidir

@RunWith(TestRunner.class)   // THIS LINE IS ALSO IMPORTANT 
public class MyTest1 
{ 
    @Test 
    public void Test1() throws Exception 
    { 
     if (Math.random() < .5) throw new Exception("ouch"); 
     assertFalse(Math.random() < .5); 
    } 
}  

Eclipse'de bağlam menüsünü kullanarak MyTest1 veya Test1 yöntemini çalıştırabilirsiniz ve TestLogger beklediğiniz gibi.

+1

Tam olarak neye baktığım tam olarak değil, çünkü kayıt için test uygulamasının karmaşıklığını artırmak istemiyorum. Testlerin dışına çıkmayı eklemek istedim, ama çözüm şu ana kadarki en iyi sonuç ve sonuçta istenen sonuç. Bu cevabı çözüm olarak işaretliyorum. –

0

Şu anda görebildiğim kadarıyla, JUnit de Eclipse'de çalışan bir dinleyici eklemenin bir yolu yok.

+1

Bu konuda fazlasıyla hayal kırıklığına uğradım. –

2

Yürütülecek bir veritabanına gereksinim duyan bir dizi sınama var. Veritabanını yürütme başlangıcında oluşturmak ve sonunda kaldırmak istiyorum.

Ayrıca maven-surefire-eklentisine bir RunListener ekledim ve iyi çalışıyor. Ayrıca, ismaven adında bir sistem özelliği değişkeni ekledim. Testi maven'den çalıştırdığımda, bu değişken başlatılır, ancak Eclipse'deki testleri çalıştırdığımda, bu değişken sıfırdır (System.getProperty ile değişkene erişirim).

<configuration> 
    <properties> 
    <property> 
     <name>listener</name> 
     <value>com.mycompany.MyRunListener</value> 
    </property> 
    </properties> 
    <systemPropertyVariables> 
    <ismaven>true</ismaven> 
    </systemPropertyVariables> 
</configuration> 

Bütün veritabanı testleri @BeforeClass ve @AfterClass yöntemleri vardır bir sınıftan devralır. Bu yöntemler, testin Maven veya Eclipse tarafından ismaven özelliğinin değerini kontrol edip etmediğini kontrol eder. Test, maven tarafından gerçekleştiriliyorsa, ismaven özelliğinin bir değeri vardır ve her şeyi yaparlar. Ama deney, Eclipse tarafından yürütülen ismaven değişken null ve onlar (@AfterClass) veritabanı (@BeforeClass) başlatır veya durdurur ediliyor edilir:

@BeforeClass 
public static void checkIfStartDatabase() { 
    String ismaven = System.getProperty("ismaven"); 
    // If it is not maven, start the database 
    if (ismaven == null) { 
    startDatabase(); 
    } 
} 

@AfterClass 
public static void checkIfStopDatabase() { 
    String ismaven = System.getProperty("ismaven"); 
    // If it is not maven, stop the database 
    if (ismaven == null) { 
    stopDatabase(); 
    } 
} 

Bu çözüm% 100 çözmez senin problemi uygularsanız, Eclipse'i kullanarak bir JUnit sınıfının tüm testlerini yürütebilir (ve hata ayıklayabilirsiniz). Ayrıca, Maven kullanarak projenizin tüm testlerini daha önce bir kod parçası üzerinde yürüteceğiniz veya Tüm testlerin yapılmasından sonra.