Post on 23-Jan-2016
Mock objects
Rosemary Torrico Bascopé
Introducción
• Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software.
• Si se escribe un objeto, también debe proporcionar una clase de prueba automatizada que contiene los métodos que trabajan con el objeto, llamando a sus métodos públicos con distintos parámetros y asegurándose de que los valores devueltos son los adecuados.
….
• Cuando se trata con datos simples u objetos de servicio, es sencillo escribir pruebas unitarias. – Sin embargo, muchos objetos dependen de otros
objetos o capas de infraestructura. Cuando se trata de probar estos objetos, a menudo es costoso, poco práctico o ineficaz.
…
• La raíz de todos los problemas son las dependencias. . Todo depende de otra cosa,
• Se debe probar las llamadas más probables a otros métodos, y si no aislar a sus dependencias, a continuación, un fallo de la prueba en realidad podría ser un error en algún otro lugar.
• Así que puede haber falsos negativos en las pruebas: una prueba que falla, puede no ser un bug en el código, pero todavía se tiene que pasar tiempo investigando esto.
…
• Mediante el aislamiento de las dependencias, se asegura que un fallo en una prueba sin duda significaría un bug en tu código. ... y las pruebas son más rápidas.
Definición
• Un Mock Object es un "objeto falso", un objeto que representa a otro y lo sustituye en funcionalidad. (http://www.dosideas.com/wiki/Mock_Object)
• También es conocido como objeto simulado (pseudoobjetos).
• Este patrón es utilizado ampliamente en la Prueba Unitaria (test unit) para asegurar un correcto aislamiento de la clase bajo test.
Comportamiento
• Imita el comportamiento de objetos reales de una forma controlada (Wikipedia)
• En los test de unidad, los mock objects se usan para simular el comportamiento de objetos complejos cuando es imposible o impracticable usar al objeto real en la prueba.
• Resuelve el problema del caso de objetos interdependientes
Funcionamiento
• Las dependencias que tenga nuestro objeto a testear pueden ser reemplazadas por mocks que funcionen como nosotros queremos.
• De esta manera, podremos testear en forma aislada a nuestra clase, sin preocuparnos por sus dependencias (más aún, sin preocuparnos por si realmente funcionan estas dependencias).
…Funcionamiento…
• Usando Mock Objects podemos asegurar un "entorno perfecto y a medida", haciendo que este entorno responda como nosotros necesitamos.
• Luego, si el test de la clase falla, será por un problema en esta misma clase (y no en sus dependencias ya que, por hipótesis, el entorno era ideal).
Frameworks para mock objects
• Existen varios frameworks que ayudan a la creación de mocks.
• EasyMock • Mockito • MockEjb • EasyMock es uno de los más conocidos, y el
usado por el equipo de Spring para testear su framework.
Cuando usar mock objects
• Se usan en lugar de objetos reales que tengan algunas de estas características:– Devuelven resultados no determinísticos (por ejemplo la hora o la
temperatura)– Su estado es difícil de crear o reproducir (por ejemplo errores de
conexión)– Es lento (por ejemplo el resultado de un cálculo intensivo o una
búsqueda en una Base de Datos)– El objeto todavía no existe o su comportamiento puede cambiar.– Debería incluir atributos o métodos exclusivamente para el testeo.– Los objetos simulados para imitar al objeto real deben imitar su
misma interfaz.
Ejemplo
• La prueba de unidad de un objeto que utiliza una base de datos, puede ser instalar, configurar una copia local de la base de datos, para ejecutar pruebas.
• Los Mock Objets pueden proporcionar una salida a este dilema.– Un objeto ficticio ajusta a la interfaz del objeto real, pero tiene
código sólo lo suficiente para engañar al objeto para comprobar y hacer el seguimiento de su comportamiento.
– Siempre y cuando la clase que se está probando se comporte como se esperaba, no se dará cuenta de la diferencia, y la prueba unitaria puede comprobar que la consulta apropiada fue realizada.
Conclusiones
• Sin mucho esfuerzo, los Mock objets permiten poner a prueba hipótesis de cosas que rara vez ocurren en la vida real. Y, por último, puede probar soluciones incompletas.
Videos recomendados
• http://www.youtube.com/watch?v=fAb_OnooCsQ
• http://www.youtube.com/watch?v=R9FOchgTtLM