2012-09-14 24 views
5

İlk kez Spring ile Junit test paketini kurmaya çalışıyorum ve sınıflarımdaki birkaç değişiklikle denedim, ancak şansım yok ve bu hatayla sona erdi: "junit.framework.AssertionFailedError: No aşağıda bir paketi içine o 2 test sınıfları ilave güvenilirSpringJUnit4ClassRunner ile JUnit testsuite hatası

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = 
{ 
"classpath:ApplicationContext.xml" 
}) 

aşağıdaki gibi Yay bağlamı yükler myClass" bulunan testler

Kısaca, aynı temel sınıftan hem 2 test sınıfları

@RunWith(SpringJUnit4ClassRunner.class) 
@SuiteClasses({ OneTest.class, TwoTest.class }) 
public class MyTestSuite extends TestCase { 

//nothing here 
} 

Bu test paketini ant'den çalıştırıyorum. Ancak, bu bana "Test bulunamadı" diyen bir hata veriyor Ancak, Bireysel 2 test vakasını karıncadan çalıştırırsam düzgün çalışıyorlar. Neden bu davranış olduğundan emin değilim, burada bir şey eksik eminim. Lütfen tavsiye.

+0

'TestCare '(' TestCase '(Junit 4'ten önce gelen)' i genişletmek yerine 'Test' notu (test metotlarının Junit 4'ten itibaren nasıl nitelendirildiği) ile denemek ister misiniz? – Vikdor

+0

Vikdor, Bu derslerdeki tüm test yöntemlerim için @Test ekledi. Suite için genişletilmiş bu TestCase sınıfı. – San

+0

Üzgünüm, MyTestSuite'in bir Suite olmasını istediğini farketmedim. Test paketini çalıştırmak için '@RunWith (Suite.class)' komutunu kullanın. @RunWith (SpringJunit4ClassRunner.class) ', çekirdeklerin enjekte edilmesine ihtiyaç duyduğunuz test durumlarında gereklidir. – Vikdor

cevap

7

Açıklamalarda belirtildiği gibi, TestSuite'ı @RunWith(Suite.class) ile çalıştırın ve tüm test durumlarını @SuiteClasses({}) ile listeleyin. Her bir test örneğinde @RunWith(SpringJunit4ClassRunner.class) ve @ContextConfiguration(locations = {classpath:META-INF/spring.xml})'u tekrarlamamak için, üzerinde tanımlanan bu ek açıklamaları içeren bir AbstractTestCase oluştururuz ve tüm test senaryoları için bu özet sınıfını genişletiriz. Bir numune aşağıda bulabilirsiniz: Bir AbstractSampleTest olmasını istemiyorsanız Bahar onlar nasıl benzer bir SpringJunitSuiteRunner ile geliyor dek

/** 
* An abstract test case with spring runner configuration, used by all test cases. 
*/ 
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = 
{ "classpath:META-INF/spring.xml" }) 
public abstract class AbstractSampleTestCase 
{ 
} 


public class SampleTestOne extends AbstractSampleTestCase 
{ 
    @Resource 
    private SampleInterface sampleInterface; 

    @Test 
    public void test() 
    { 
     assertNotNull(sampleInterface); 
    } 

} 


public class SampleTestTwo extends AbstractSampleTestCase 
{ 
    @Resource 
    private SampleInterface sampleInterface; 

    @Test 
    public void test() 
    { 
     assertNotNull(sampleInterface); 
    } 

} 


@RunWith(Suite.class) 
@SuiteClasses(
{ SampleTestOne.class, SampleTestTwo.class }) 
public class SampleTestSuite 
{ 
} 

, o zaman, her test durumda yay koşucu ek açıklamaları tekrarlamanız gerekir SpringJunitParameterizedRunner eklemeniz gerekir.

+0

, ilk kod bloğumda aynı şeyden bahsetmiştim temel sınıf için. Kaybettiğim tek şey, şimdi eklediğim taban sınıfı için soyut. Ancak, hala aşağıdaki hatayı görüyoruz. "java.lang.NoClassDefFoundError: junit/framework/Test" Bu sınıf yolu ile ilgili bir şey. Ama benim yiğit görev sınıf yolum kavanoz yargı 4.8 gösteriyor. Bir şeyi özlüyorum mu yoksa sınıf yolum mu yanlış? – San

+0

"Test" ek açıklaması "org.junit.Test" olarak çözülmelidir. Durumunuzda neden "junit.framework.Test" olduğundan emin değilsiniz. İthalatı buna göre değiştirebilir misiniz? – Vikdor