Lo que estamos tratando de hacer no es la Unidad de Pruebas
Si el resultado si los objetos devueltos son instancias de clases concretas específicas, usted no es prueba de la unidad. Eres una prueba de integración. Si bien las pruebas de integración son importantes, no es lo mismo.
En las pruebas unitarias, solo necesita probar el objeto en sí. Si afirma en el tipo concreto de los objetos abstractos devueltos, está probando la implementación del objeto devuelto.
pruebas unitarias de los objetos en general
Cuando la unidad de pruebas, hay cuatro cosas, que desea hacer valer:
- valores de retorno de consultas (métodos no vacíos) son lo que les espera a ser.
- Los efectos secundarios de los comandos (métodos de vacío) modifican el objeto como se espera.
- Se reciben los comandos que se envían a otros objetos (esto generalmente se hace usando simulaciones).
Además, solo desea probar lo que se puede observar desde una instancia de objeto, es decir, la interfaz pública. De lo contrario, te vinculas a un conjunto específico de detalles de implementación. Esto requeriría que cambies tus pruebas cuando cambien esos detalles.
fábricas Prueba de la unidad
Unidad de prueba en fábricas es realmente interesante, porque usted no está interesado en el comportamiento de los objetos devueltos de consultas. Ese comportamiento (afortunadamente) se prueba en otro lugar, presumiblemente mientras se prueba el objeto por sí mismo. Sólo está realmente interesado en si el objeto devuelto tiene o no el tipo correcto , que está garantizado si su programa se compila.
Como las fábricas no cambian con el tiempo (porque entonces serían "Constructores", que es otro patrón), no hay comandos para probar.
Las fábricas son responsables de crear instancias de los objetos, por lo que no deben depender de otras fábricas para hacer esto por ellos. Ellos pueden depender de un Constructor, pero aún así, no se supone que podamos probar la corrección del Constructor, solo si el Constructor recibe el mensaje o no.
Esto significa que todo lo que tiene que probar en Factories es si envían o no los mensajes a los objetos de los que dependen. Si usa Inyección de Dependencia, esto es casi trivial. Solo fíjate en las dependencias en las pruebas de tu unidad y verifica que reciban los mensajes.
Resumen de las fábricas de prueba Unidad
- No probar el comportamiento ni los detalles de implementación de los objetos devueltos! ¡Su fábrica no es responsable de la implementación de las instancias de objetos!
- Compruebe si los comandos enviados a las dependencias se reciben o no.
Eso es todo. Si no hay dependencias, no hay nada que probar. Excepto tal vez para afirmar que el objeto devuelto no es una referencia null
.
fábricas pruebas de integración
Si usted tiene un requisito de que el tipo de objeto abstracto devuelto es una instancia de un tipo específico concreto, entonces esto cae bajo las pruebas de integración.
Otros aquí ya han respondido cómo hacerlo utilizando el operador instanceof
.
Se marcó abajo porque debe usar Aserción en lugar de una prueba ... – Nicolas