El uso adecuado (o al menos la documentación) de JUnit me pareció muy confuso. Esta pregunta sirve tanto como referencia futura como como una pregunta real.
Si he entendido correctamente, hay dos enfoques principales para crear y ejecutar una prueba JUnit:
Enfoque A (estilo JUnit 3): cree una clase que amplíe TestCase y comience los métodos de prueba con la palabra test
. Al ejecutar la clase como una prueba JUnit (en Eclipse), todos los métodos que comienzan con la palabra test
se ejecutan automáticamente.
import junit.framework.TestCase;
public class DummyTestA extends TestCase {
public void testSum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Enfoque B (estilo JUnit 4): cree una clase 'normal' y anteponga una @Test
anotación al método. Tenga en cuenta que NO tiene que comenzar el método con la palabra test
.
import org.junit.*;
import static org.junit.Assert.*;
public class DummyTestB {
@Test
public void Sum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
Mezclar los dos parece no ser una buena idea, vea, por ejemplo, esta pregunta de stackoverflow :
Ahora, mis preguntas:
- ¿Cuál es el enfoque preferido , o cuándo usaría uno en lugar del otro?
- El enfoque B permite probar las excepciones extendiendo la anotación @Test como en
@Test(expected = ArithmeticException.class)
. Pero, ¿cómo se prueban las excepciones cuando se utiliza el enfoque A? Al utilizar el enfoque A, puede agrupar varias clases de prueba en un conjunto de pruebas como esta:
TestSuite suite = new TestSuite("All tests");
suite.addTestSuite(DummyTestA.class);
suite.addTestSuite(DummyTestAbis.class);
Pero esto no se puede usar con el enfoque B (ya que cada clase de prueba debería subclasificar TestCase). ¿Cuál es la forma correcta de agrupar las pruebas para el enfoque B?
Editar: he agregado las versiones JUnit a ambos enfoques
extends TestCase
y luego cada prueba también anotó@Test
solo para confundir las cosas. :)