Acabo de hacer un pequeño test tonto con JUnit4 para probarlo. El test es este
import static org.junit.Assert.*;
import org.junit.*;public class UnTest
{
// Se inicializa a false, pare comprobar que se llama al metodo inicializa()
private boolean valor=false;@org.junit.Before
public void inicializa()
{
valor=true;
}@Test
public void laPrueba()
{
// Este test falla si no se ha llamado a inicializa()
assertEquals(valor,true);
}public static void main (String [] args)
{
org.junit.runner.JUnitCore.main(“UnTest”);
}
}
Lo primero que me llama la atención es la nueva forma de marcar los métodos. En las versiones anteriores, JUnit sabía lo que era cada método por el nombre del método. Por ejemplo, el método que debía ejecutarse antes de iniciar los test y para darnos oportunidad de inicializar las cosas debía llamarse setUp(). Los métodos de test debían empezar por testLoQueSea(). Además la clase debía heredar de alguna de las clases de Test de JUnit.
Ahora no. Se usan las anotaciones de java (los @no.se.que que se pone delante de los métodos). Marcando un método como @org.junit.Before, JUnit sabe que debe ejecutar ese método antes de los test. Etiquetando un método como @Test, JUnit sabe que ese es un método de Test. Las clases de test ahora no tienen que heredar de nadie.
Otra cosa que me ha llamado la atención, aunque seguramente es de java 5, es el import static del principio. El método assertEquals() pertenece a la clase org.junit.Assert, así que imagino que ese import static tan curioso es para importar los métodos estáticos de esa clase y poder usarlos sin más.