2011-07-05 11 views
33

Udało mi się dowiedzieć, jak utworzyć TestSuite w jUnit 4, ale naprawdę brakuje mi możliwości v3 zawijania pakietu w TestSetup.Ustawienia TestSuite w jUnit 4

Jakieś pomysły, jak uzyskać konfigurację @ BeforeClass/@ AfterClass dla zestawu przypadków testowych w jUnit 4?

tj.

@RunWith(Suite.class) 
@Suite.SuiteClasses({Test1.class, Test2.class}) 
public class MyTestSuite { 
    @BeforeClass public static void setUpClass() { 
     // Common initialization done once for Test1 + Test2 
    } 
    @AfterClass public static void tearDownClass() { 
     // Common cleanup for all tests 
    } 
} 

Niestety powyższy fragment kodu nie działa. @BeforeClass działa tylko w klasie testowej.

+0

Zgodnie z tą odpowiedzią powinno działać: http://stackoverflow.com/questions/82949/before-and-after-suite-execution-hook-in-junit- 4-x # 177069 – Sebi

Odpowiedz

50

Oto, co mam i działa dobrze.

import org.junit.AfterClass; 
import org.junit.BeforeClass; 
import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 
import org.junit.runners.Suite.SuiteClasses; 

@RunWith(Suite.class) 
@SuiteClasses({ TestSuite1.class, TestSuite2.class }) 
public class CompleteTestSuite { 

    @BeforeClass 
    public static void setUpClass() {  
     System.out.println("Master setup"); 

    } 

    @AfterClass public static void tearDownClass() { 
     System.out.println("Master tearDown"); 
    } 

} 

Oto mój zestaw testów 1 (wykonaj to samo dla zestawu testów 2).

import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 
import org.junit.runners.Suite.SuiteClasses; 

@RunWith(value = Suite.class) 
@SuiteClasses(value = { TestCase1.class }) 
public class TestSuite1 {} 

A oto moja klasa testowa. Utwórz zarówno testcase1, jak i testcase2.

import static org.junit.Assert.assertEquals; 

import org.junit.BeforeClass; 
import org.junit.Test; 

public class TestCase1 { 

    @BeforeClass 
    public static void setUpClass() {  
     System.out.println("TestCase1 setup"); 
    } 

    @Test 
    public void test1() { 
     assertEquals(2 , 2); 
    } 
}  

powinny masz 5 klas completesuite Suite1 suite2 test1 test2

i upewnij się, że masz JUnit na swojej drodze budowania. To powinno działać!

Oto wynik

Master setup 
TestCase1 setup 
Master tearDown 
+0

Co! To faktycznie działa! Geez, zastanawiam się, jak to się stało, że nie mogłem go wczoraj uruchomić (prawdopodobnie z mojej strony tylko błąd). – Rasmus

+0

Niesamowite rozwiązanie! Nawet w moim scenariuszu, w którym niestandardowy skaner testowy tworzy listę testów. –

Powiązane problemy