2011-09-17 12 views
13

¿Cuál es la mejor forma de probar las subclases? Supongamos que hay una clase base para la que ya he escrito pruebas y hay algunas subclases que anulan parte del comportamiento de los padres en los métodos públicos y/o protegidos.Cómo probar las subclases de la unidad

¿Debería la clase de prueba para mis subclases ampliar (y anular los métodos de prueba cuando sea apropiado) la clase de prueba para mi clase base para que se apliquen todas las pruebas de la clase base? De lo contrario, esperaría tener un código de prueba repetido.

Respuesta

9

De acuerdo con el Liskov substitution principle, las instancias de las subclases deben exhibir las mismas propiedades que la clase base y, por lo tanto, pasar (¿todas?) Las mismas pruebas unitarias.

Me gustaría ejecutar [tal vez no todos, todos los que son relevantes] las pruebas de la clase base para cada subclase. Esto se puede lograr con un test helper.

Sí, la subclasificación de la clase de prueba podría ser una buena manera de evitar la duplicación en las pruebas unitarias. Eche un vistazo al patrón Testcase superclass.

+0

Su afirmación sobre cómo se aplica el principio de substición de Liskov es incorrecta. El método de una subclase no tiene que pasar todas las pruebas unitarias de la base; de ​​lo contrario, serían conductualmente idénticas. ¿En qué caso, cuál es el punto de anular los métodos base? –

+5

La publicación original del principio de Liskov es correcta. La subclase debería pasar todas las pruebas unitarias para la superclase, * y más *. Las pruebas adicionales reflejan la funcionalidad adicional de la subclase. Por supuesto, puede anular un método de tal manera que viole a Liskov, y en este caso fallarán las pruebas pertinentes de la unidad. – ComDubh

6

Es difícil de ver sin un ejemplo, pero probaría la clase base en un conjunto de pruebas, y luego crearé nuevas pruebas para las subclases y solo probaré el comportamiento que difiere.

Cuestiones relacionadas