2011-07-05 25 views
33

He logrado averiguar cómo hacer un TestSuite en jUnit 4, pero realmente echo de menos la posibilidad v3 de incluir un conjunto en un TestSetup.TestSuite Setup en jUnit 4

¿Alguna idea sobre cómo obtener la instalación @ BeforeClass/@ AfterClass ejecutada para un conjunto de casos de prueba en jUnit 4?

I.e.

@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 
    } 
} 

Lamentablemente, el fragmento de código anterior no funciona. @BeforeClass solo funciona por clase de prueba.

+0

De acuerdo con esta respuesta que debería funcionar: http://stackoverflow.com/questions/82949/before-and-after-suite-execution-hook-in-junit- 4-x # 177069 – Sebi

Respuesta

50

Esto es lo que tengo y funciona muy bien.

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"); 
    } 

} 

Aquí está mi suite de prueba 1 (haga lo mismo para el conjunto de prueba 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 {} 

Y aquí está mi clase de prueba. Cree ambos testcase1 y 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); 
    } 
}  

debe tener 5 clases completesuite suite1 suite2 test1 test2

y asegúrese de que tiene Junit en su trayectoria de la estructura. Esto debería correr!

Aquí está la salida

Master setup 
TestCase1 setup 
Master tearDown 
+0

¡Qué! ¡Realmente funciona! Caray, me pregunto cómo es que no pude hacer que funcionara ayer (probablemente solo un error de mi parte). – Rasmus

+0

¡Solución impresionante! Incluso en mi escenario donde un escáner de prueba personalizado crea la lista de pruebas. –

Cuestiones relacionadas