2013-01-02 14 views
5

Chciałbym napisać, że po prostu klasę BaseTest stanowi "uniwersalny setUp() metodę" dla wszystkich podklas rozciągających:JUnit Test baza Ustawianie automatyczne

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

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

wówczas:

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

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

Tak idealnie, za każdym razem metoda podklasa odnotowany przez @Test jest wykonywany, JUnit najpierw wywołać metodę BaseTest#setUp(), który ma cokolwiek (naprawdę nie ma znaczenia). Być może jego zresetowaniu pewne stany próbne do wartości początkowej, tak aby każdy test można uruchomić na „czystym kontem”, itp Ponownie, nie ma znaczenia.

Niestety kiedy uruchomić ten kod, tylko widzę setUp() was called! drukowania na ekranie raz, więc nie jest wyraźnie BaseTest „zawijania” moi @Test metody tak, jak chcę. Czy jest jakiś sposób, aby to osiągnąć? Z góry dziękuję!

Odpowiedz

13

Właśnie prowadził to i obie metody badań są nazywane i oba razy konfiguracja jest nazywana.

Jeśli w klasie pochodnej masz również metodę z adnotacjami @Before, musisz podać metodę konfiguracji klasy podstawowej na coś innego, np. setUpBase(), ponieważ jeśli nazwy sposobie są takie same tylko @Before opisywane Sposób klasy pochodnej nazywa się byłoby zastąpienie metody w klasie bazowej.

+0

Dzięki @Bedwyr Humphreys (+1) - zmieniłem 'fail()' oświadczenia do średnikami (aby zmusić metod testowych przejść) i tak, rodzic 'setup()' Metoda nazwano dwukrotnie. Musi więc istnieć coś na temat korzystania z tej konfiguracji w połączeniu z uszkodzonymi przypadkami testowymi, które powodują, że metoda 'setUp()' może być wywołana tylko raz. Dzięki jeszcze raz. – IAmYourFaja

+0

Pobiegłem go fail() (w Eclipse) i nadal nazywano dwukrotnie – blank

+0

Dziwne ... dobrze nie ma znaczenia, usuwając 'fail()' s działa więc jestem dobry, aby przejść. Dzięki jeszcze raz. – IAmYourFaja

Powiązane problemy