2013-01-02 14 views
5

mi piacerebbe scrivere una classe BaseTest che fornisce semplicemente un "setUp() metodo universale" per tutte le sottoclassi estendono:JUnit test di base di ATP

public class BaseTest { 
    @Before 
    public void setUp() { 
     System.out.println("setUp() was called!"); 

     // Doesn't really matter what this is doing... 
     EnvironmentConfigurator.configureEnvForTesting(); 
    } 
} 

Poi:

public class WidgetTest extends BaseTest { 
    @Test 
    public void test1() { 
     fail(); 
    } 

    @Test 
    public void test2() { 
     fail(); 
    } 
} 

Quindi idealmente, ogni volta che viene eseguito un metodo sottoclasse annotato da @Test, JUnit chiamerebbe prima il metodo BaseTest#setUp(), che fa tutto (non importa). Forse la sua reimpostazione di alcuni stati simulati su un valore iniziale in modo che ogni test possa iniziare su una "lavagna pulita", ecc. Di nuovo, non ha molta importanza.

Purtroppo quando si esegue questo codice, vedo solo setUp() was called! stampa alla schermata volta, così chiaramente BaseTest non è "wrapping" i miei @Test metodi come voglio. C'è un modo per raggiungere questo obiettivo? Grazie in anticipo!

risposta

13

Ho appena eseguito questo ed entrambi i metodi di test vengono chiamati ed entrambe le volte viene chiamato setUp.

Se si dispone di un metodo annotato @Before anche nella classe derivata, sarà necessario denominare il metodo di impostazione della classe base su qualcosa di diverso, ad es. setUpBase() perché se i nomi dei metodi sono gli stessi viene chiamato solo il metodo annotato @Before nella classe derivata in quanto sostituirà il metodo nella classe base.

+0

Grazie a @Bedwyr Humphreys (+1) - Ho modificato le istruzioni 'fail()' in punto e virgola (per forzare il passaggio dei metodi di test) e sì, il metodo padre 'setUp()' è stato chiamato due volte. Quindi ci deve essere qualcosa sull'utilizzo di questa configurazione combinata con casi di test falliti che fanno sì che il metodo 'setUp()' sia chiamato una sola volta. Grazie ancora. – IAmYourFaja

+0

L'ho eseguito con fail() (in Eclipse) ed è stato ancora chiamato due volte – blank

+0

Strano ... beh non importa, rimuovendo il 'fail()' s funziona così sono a posto. Grazie ancora. – IAmYourFaja