2008-10-08 13 views
9

Es una nueva (o diferente) instancia de TestCase objeto se utiliza para ejecutar cada método de prueba en un caso de prueba JUnit? O una instancia se reutiliza para todas las pruebas?JUnit TestCase objeto instanciación

public class MyTest extends TestCase { 
    public void testSomething() { ... } 
    public void testSomethingElse() { ... } 
} 

Mientras se ejecuta esta prueba, el número de casos de MyTest clase se crea?

Si es posible, proporcione un vínculo a un documento o código fuente de donde puedo verificar el comportamiento.

Respuesta

4

No pude encontrar una respuesta clara en los documentos JUnit sobre su pregunta, pero la intención, como anjanb escribió, es que cada prueba sea independiente de las demás, por lo que se podría crear una nueva instancia de TestCase para cada prueba ser ejecutado.

Si tiene configuración de prueba costosa (" accesorios") que desea ser compartidos a través de todos los casos de prueba en una clase de prueba, puede utilizar la anotación @BeforeClass en un método estático para lograr este resultado: http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html. Sin embargo, tenga en cuenta que aún se puede crear una nueva instancia para cada prueba, pero eso no afectará a los datos estáticos que su método @BeforeTest haya inicializado.

+0

@BeforeClass no está disponible en JUnit 3. Se describe un equivalente aquí: http://stackoverflow.com/questions/3023091/does-junit-3-have-something-analogous-to-beforeclass –

8

Sí, se crea una instancia independiente.

Mientras se ejecuta la prueba, 2 casos de MyTest se crea.

Si desea un comportamiento diferente, una opción es utilizar una herramienta similar llamada TestNG (http://testng.org/doc/).

+0

Gracias por la respuesta rápida. ¿También puede proporcionar un enlace a un documento o código fuente donde pueda verificar este comportamiento? – Manki

+0

Puede verificarlo fácilmente al proporcionar un constructor y agregarle System.out.println. –

2

Si está preguntando esto porque le preocupan los datos que se inicializan y reinicializan en su constructor, tenga en cuenta que la forma predeterminada de inicializar los datos de casos de prueba es a través de setUp() y tearDown() exclusivamente.

3

Hay una instancia para cada prueba. Trate

public class MyTest extends TestCase { 
    public MyTest() { System.out.println("MyTest Constructor"); 
    public void setUp() { System.out.println("MyTest setUp"); 
    public void tearDown() { System.out.println("MyTest tearDown"); 
    public void testSomething() { System.out.println("MyTest testSomething"); 
    public void testSomethingElse() { System.out.println("MyTest testSomethingElse"); 
} 

El código fuente (incluyendo a nuevas versiones - tu y mi ejemplo es Junit 3) está en http://www.junit.org

0

Sí, sin duda. Descubrí que no se podía acceder a los datos que almacenaba en las variables de instancia entre las pruebas debido a este diseño.

Cuestiones relacionadas