2010-01-26 6 views
5

Estoy usando JUnit 3 y tengo una situación en la que a menudo tengo que probar que un objeto se ha creado correctamente. Mi idea era escribir una clase MyTestBase como se muestra a continuación y luego extenderla para las pruebas de unidades específicas de la situación.JUnit extiende la clase base y ejecuta pruebas en esa clase

Sin embargo, en el ejemplo que he dado, MyTests no ejecuta las pruebas en MyTestBase.

public class MyTestBase extends TestCase { 
    protected String foo; 
    public void testFooNotNull() { 
    assertNotNull(foo); 
    } 
    public void testFooValue() { 
    assertEquals("bar", foo); 
    } 
} 


public class MyTests extends MyTestBase { 
    public void setUp() { 
    this.foo = "bar"; 
    } 
    public void testSomethingElse() { 
    assertTrue(true); 
    } 
} 

¿Qué estoy haciendo mal?

Actualización Disculpa. Estúpido error. Las pruebas en mi clase base no fueron nombradas correctamente.

+0

¿por qué no utilizar junit 4? – Bozho

+1

Como el sistema está escrito en Java 1.4.2 –

+0

, he votado para cerrar la pregunta porque es incorrecta. No hace una pregunta real. –

Respuesta

4

Ha dicho "MyTests no ejecuta las pruebas en MyTestBase". Lo probé y todas las pruebas se llamaron incluyendo las de MyTestBase.

+0

¿Lo intentó con JUnit 3? – Bozho

+0

Sí, lo probé desde Eclipse con JUnit 3. Ejecuté la clase MyTests como una prueba JUnit y todas las pruebas pasaron con éxito. –

+0

agradable. entonces la pregunta es irrelevante :) – Bozho

2

Bueno, podría hacer MyTestBase abstracto, para que no intentara ejecutar pruebas en la clase base. Una mejor solución sería tener setUp en la clase base y hacer que se llame a métodos abstractos (por ejemplo, getFoo()) para inicializar las variables que requerirá más adelante.

De hecho, si tiene esos métodos abstractos, puede que ni siquiera necesite una fase de configuración: puede llamar a los métodos abstractos donde necesita el valor, en lugar de usar una variable de instancia . Obviamente, dependerá de la situación exacta, pero en muchos casos esto podría ser mucho más limpio.

0

Lo que estamos tratando de hacer no es la forma más adecuada para lograr su objetivo:

Si usted quiere tener la funcionalidad común que hace algunas comprobaciones

  • la definen en una clase de utilidad, en static métodos
  • definen en la superclase y lo llaman de cada método de prueba
0

no sé qué es exactamente lo que quiere hacer, pero u De hecho, no es una buena idea tener demasiadas partes comunes en la prueba, porque cuando la parte común falla, tendrás una gran cantidad de pruebas que fallan, incluso si tienes un pequeño error en tu software.

Le sugiero que use una fábrica o un generador para crear el objeto complejo y luego pruebe la fábrica (o el constructor) para crear el objeto correctamente.

Cuestiones relacionadas