2011-04-20 12 views
8

İlkbahar 2.0.8'in AbstractTransactionalDataSourceSpringContextTests üzerinde oluşturulan test sınıflarımız var. Bunların hepsi JUnit3 tarzında yazılmış çok sayıda var.JUnit3 test sınıflarında Ant ile özel bir JUnit4 Runner'ı nasıl çalıştırabilirim?

JUnit 4 filtrelemesini kullanmak için, bu testleri belirli bir uygulama ortamıyla eşleştirmemize ve buna göre filtrelememize olanak veren JUnit38Runner'ı değiştirdik.

Tüm test paketi, özel JUnit38Runner cihazımızdaki @RunWith ek açıklamasını kullanarak, Ant'in dışında iyi çalışır. Bununla birlikte, Ant uygulamasında çalıştırmaya çalıştığımızda, bireysel testleri ya junit.framework.TestSuite olarak çalıştırmaya ya da JUnit4TestAdapter içine sarmaya zorlar ve her ikisi de JUnit4 altındaki ek açıklamaları görmezden gelir. Daha da kötüsü yapmak için mevcut süitlerimiz, JUnit'e delege etmek yerine doğrudan suite() yöntemini çağıran Ant tarafından açıkça geçersiz kılınmıştır.

Ant JUnitTestRunner'dan genişletmeye çalıştım ve run() yöntemini geçersiz kılmaya çalıştım, ancak sınıf basitçe uzantı için yazılmadı.

JUnitTestRunner'ın tamamını kopyalayıp (onu kırılgan kod sorunlarına açacak olan) hacklemekten başka, bu problemi çözmek için başka yaklaşımlarla herhangi bir şansı oldu mu?

+0

Burada birkaç kod-kokusu var gibi görünüyor. Muhtemelen aradığınız cevap olmadığını biliyorum, ancak test durumlarınızı yeniden gözden geçirmenin vakti gelmiş olabilir. – bakoyaro

+0

Refactoring, Ant ile ilgili sorunları düzeltmeyecektir (Jun 3'te JUnit 4 testlerini sarma). Çok sayıda çözümle birlikte, tökezliyor ama sanırım mermiyi ısırmak ve JUnit4 Ant görevini bu günlerden birine yazmam gerekecek. – Matt

+0

Belki de [JUnit4'e Yükseltme ve eski JUnit 3 testlerini ve test süitlerini bir arada çalıştırarak tutmaya] bir yanıt var. [1]? [1]: http: //stackoverflow.com/questions/1861875/upgrading-to-junit4-and-keeping-legacy-junit-3-tests-and-test-suites-by-running –

cevap

0

Benzer bir sorunla karşılaştık ve cunta görevini yürütmek kadar temiz olmasa da, çözülmesi çok zor değil. Sadece Junit4Runner'ı çalan bir main() ile bir sınıf oluşturduk. XML'de cinnet rapor çıktısını yazmayı deneyen bir RunListener ekliyor. Buradaki fikir, dataformatın koşucudan daha az değişiklik göstermesiydi, bu yüzden daha az kırılgandır.

Adil bir miktar ortama özgü kodu çıkardım, ancak bu temel fikir. karınca Bizim test hedef şuna benzer:

<java failonerror="yes" 
      fork="true" 
      classname="com.mycompany.test.Junit4Runner"> 
     <classpath> 
      <pathelement location="${basedir}/bin" /> 
      <pathelement path="${ProjectTest.classpath}" /> 
      <!-- above classpath includes junit-4.8.1.jar --> 
     </classpath> 
     <arg value="${test.class}" /> 
    </java> 

Sen koşucu sınıfına here için kodunu görüntüleyebilirsiniz. Java 6 SE ve Junit 4.8 dışındaki herhangi bir şeye bağlı değildir ve Java 5 SE ile uyumlu olabilir.

+0

Bu işe yarayabilir gibi görünüyor olsa da, p_ ve m_ alışverişi yapmadan önce değiştirmene rağmen ;-). Maalesef şu anda test etmek için zamanımız yok, ancak şimdilik çözüldüğümüzü işaretleyeceğim. – Matt

+0

p_ ve m_ bizim için bir stil seçimidir - sanırım buna alıştım. – ahawtho

İlgili konular