Así que he empezado a disposición de las pruebas unitarias para el siguiente trozo de código:Unidad de Pruebas de Arquitectura Pregunta
public interface MyInterface {
void MyInterfaceMethod1();
void MyInterfaceMethod2();
}
public class MyImplementation1 implements MyInterface {
void MyInterfaceMethod1() {
// do something
}
void MyInterfaceMethod2() {
// do something else
}
void SubRoutineP() {
// other functionality specific to this implementation
}
}
public class MyImplementation2 implements MyInterface {
void MyInterfaceMethod1() {
// do a 3rd thing
}
void MyInterfaceMethod2() {
// do something completely different
}
void SubRoutineQ() {
// other functionality specific to this implementation
}
}
con varias implementaciones y la expectativa de más por venir.
Mi primer pensamiento fue para salvarme pruebas unitarias re-escritura de tiempo con algo como esto:
public abstract class MyInterfaceTester {
protected MyInterface m_object;
@Setup
public void setUp() {
m_object = getTestedImplementation();
}
public abstract MyInterface getTestedImplementation();
@Test
public void testMyInterfaceMethod1() {
// use m_object to run tests
}
@Test
public void testMyInterfaceMethod2() {
// use m_object to run tests
}
}
la que entonces podría fácilmente en subclases para poner a prueba la aplicación de métodos adicionales específicos de esta manera:
public class MyImplementation1Tester extends MyInterfaceTester {
public MyInterface getTestedImplementation() {
return new MyImplementation1();
}
@Test
public void testSubRoutineP() {
// use m_object to run tests
}
}
y también para la implementación 2 en adelante.
Así que mi pregunta es realmente: ¿hay alguna razón para no hacer esto? A JUnit parece gustarle, y satisface mis necesidades, pero realmente no he visto nada igual en ninguno de los libros de prueba de unidades y ejemplos que he estado leyendo.
¿Hay alguna práctica recomendada que estoy violando sin querer? ¿Me estoy preparando para un dolor de cabeza en el camino? ¿Simplemente hay una manera mucho mejor por ahí que no he considerado?
Gracias por cualquier ayuda.
No sabía nada de esta característica, gracias por compartirla. Más información, y un ejemplo de trabajo aquí: http://www.devx.com/Java/Article/31983/0/page/3 para cualquier otra persona interesada. –