Quiero ejecutar las mismas pruebas JUnit para diferentes implementaciones de interfaz. He encontrado una buena solución con la opción @parameter:Prueba de implementaciones de múltiples interfaces con las mismas pruebas: JUnit4
public class InterfaceTest{
MyInterface interface;
public InterfaceTest(MyInterface interface) {
this.interface = interface;
}
@Parameters
public static Collection<Object[]> getParameters()
{
return Arrays.asList(new Object[][] {
{ new GoodInterfaceImpl() },
{ new AnotherInterfaceImpl() }
});
}
}
Esta prueba se ejecuta dos veces, primero con el GoodInterfaceImpl luego con la claseAnotherInterfaceImpl. Pero el problema es que necesito para la mayoría de las pruebas un nuevo objeto. Un ejemplo simplificado:
@Test
public void isEmptyTest(){
assertTrue(interface.isEmpty());
}
@Test
public void insertTest(){
interface.insert(new Object());
assertFalse(interface.isEmpty());
}
Si el isEmptyTest se ejecuta después de la insertTest falla.
¿Existe la opción de ejecutar automáticamente cada caso de prueba con una nueva instancia de una implementación?
Por cierto: La implementación de un claro() o reset() -method para la interfaz no es realmente una opciones ya que no lo necesitaría en el código productiva.
Sugiero mirar en la inyección de dependencia. Aquí hay un pequeño artículo sobre cómo usarlo para lograr exactamente lo que está buscando http://www.javaranch.com/journal/200709/dependency-injection-unit-testing.html –
Gracias por su respuesta rápida ! Pero este artículo describe cómo romper dependencias en una interfaz. Quiero probar la interfaz (no la clase que usa la interfaz, o para hablar en términos del artículo: quiero probar la granja remota [los motores], no el servlet de granja [los carros]). –