2012-09-14 17 views
5

Sto provando a installare la suite di test Junit con Spring per la prima volta e ho provato con un paio di modifiche nelle mie classi, ma senza fortuna e ho finito con questo errore: "junit.framework.AssertionFailedError: No prove disponibili a Myclass"SpringJUnit4ClassRunner con JUnit testuite error

brevemente, ho classi 2 prova entrambi sono da stessa classe base che carica contesto Spring come sotto

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

ho provato ad aggiungere tali classi di test 2 in composizioni come sotto

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

//nothing here 
} 

Sto eseguendo questa suite di test da ant. Ma questo mi dà un errore che dice "Nessun test trovato" Tuttavia, se eseguo i singoli 2 casi di test da ant, funzionano correttamente. Non sono sicuro del perché questo comportamento, sono sicuro che manca qualcosa qui. Per favore consiglio

+0

Vuoi provare con l'annotazione '@ Test' (che è il modo in cui i metodi di prova sono qualificati da Junit 4) invece di estendere' TestCase' (che era precedente a Junit 4)? – Vikdor

+0

Vikdor, ho annotato @Test per tutti i miei metodi di test in quelle classi. Questa classe TestCase è stata estesa per la suite. – San

+0

Scusa, non avevo capito che volevi che MyTestSuite fosse una Suite. Utilizzare '@RunWith (Suite.class)' per eseguire la suite di test. Il '@RunWith (SpringJunit4ClassRunner.class)' è necessario nei casi di test in cui è necessario iniettare i fagioli. – Vikdor

risposta

7

Come menzionato nei commenti, eseguiamo TestSuite con @RunWith(Suite.class) ed elenca tutti i casi di test con @SuiteClasses({}). Per non ripetere lo @RunWith(SpringJunit4ClassRunner.class) e @ContextConfiguration(locations = {classpath:META-INF/spring.xml}) in ogni caso di test, creiamo un AbstractTestCase con queste annotazioni definite su di esso ed estendiamo questa classe astratta per tutti i casi di test. Un campione può essere trovata qui sotto:

/** 
* 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 
{ 
} 

Se non si desidera avere un AbstractSampleTest, allora avete bisogno di ripetere le annotazioni primavera corridore su ogni caso di test, fino a primavera arriva con un SpringJunitSuiteRunner simile al modo in cui è necessario aggiungere un SpringJunitParameterizedRunner.

+0

era la stessa cosa che ho fatto inizialmente, ho menzionato lo stesso sul mio primo blocco di codice che è per classe base. L'unica cosa che mi mancava è astratta per la classe base, che ho aggiunto ora. Ma, continuando a vedere l'errore qui sotto. "java.lang.NoClassDefFoundError: junit/framework/Test" questo è qualcosa correlato al classpath. Ma il mio classpath compito junit mostra il junit jar 4.8. Mi manca qualcosa o il mio classpath è sbagliato? – San

+0

L'annotazione 'Test' dovrebbe risolversi in' org.junit.Test'. Non sei sicuro del motivo per cui è junit.framework.Test nel tuo caso. Puoi cambiare l'importazione di conseguenza? – Vikdor