2012-05-14 10 views
6

ho iniziato a sperimentare e ora voglio usare @After, @Before e @Test ma la mia domanda corre solo il metodo @Before e fornisce in uscita su console@After, @ prima non funziona in testcase

prima

Tuttavia, se rimuovo @After e @Before, viene eseguito il test @. Il mio codice è qui:

public class TestPractise extends AbstractTransactionalDataSourceSpringContextTests{ 

    @Before 
    public void runBare(){ 
     System.out.println("before"); 
    } 

    @Test 
    public void testingMethod(){ 
     System.out.println("testing"); 
    } 

    @After 
    public void setDirty(){ 
     System.out.println("after"); 
    } 
} 

Perché non sono @After, @Test e @before lavorando contemporaneamente?

risposta

10

La classe AbstractTransactionalDataSourceSpringContextTests impone l'uso della vecchia sintassi JUnit 3.x, il che significa che qualsiasi annotazione di JUnit 4 non funzionerà.

Il tuo metodo runBare() viene eseguito non a causa del @Before annotazione, ma perché è chiamato runBare(), che è un metodo fornito da ConditionalTestCase e JUnit TestCase di classe.

in modo da avere 2 soluzioni:

  • Utilizzare la risposta AlexR di utilizzare JUnit 4 test e primavera;
  • Tenere la vostra eredità di AbstractTransactionalDataSourceSpringContextTests, ma utilizzare il onSetUp e onTearDown metodi al posto dei metodi @Before e @After.
+0

Hai avuto lo stesso problema mescolando JUnit 4 e 5. Controlla le tue importazioni per le annotazioni e assicurati che corrispondano. – Muhd

3

Dovrebbe funzionare ... Ma dal momento che si sta lavorando con il framework di primavera e JUnit 4 è stato introdotto anni fa, suggerisco di utilizzare annotazioni anziché ereditarietà.

Quindi, annota la tua classe con @RunWith(SpringJUnit4ClassRunner.class). Rimuovi extends AbstractTransactionalDataSourceSpringContextTests.

Non dimenticare di fare i @Before e @After metodi statici

Ora dovrebbe funzionare.

Anche se si desidera estendere le classi di test di Spring abstract, prestare attenzione che alcune di esse sono deprecate. Ad esempio, la classe AbstractTransactionalDataSourceSpringContextTests è obsoleta.

+0

Fornirmi un esempio per @RunWith (SpringJUnit4ClassRunner.class) ?? –

+0

se si scrive un esempio per AbstractTransactionalDataSourceSpringContextTests che sarebbe buono .. –

+0

Ci scusiamo per il ritardo. L'esempio è molto semplice. Basta rimuovere "estende ..." e aggiungere l'annotazione che ho scritto alla classe. Quindi prova a eseguire il test. – AlexR