16
Mock objects Rosemary Torrico Bascopé

Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

Embed Size (px)

Citation preview

Page 1: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

Mock objects

Rosemary Torrico Bascopé

Page 2: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

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.

Page 3: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

….

• 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.

Page 4: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

• 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.

Page 5: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

• 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.

Page 6: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software
Page 7: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

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.

Page 8: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

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

Page 9: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

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).

Page 10: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

…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).

Page 11: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

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.

Page 12: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

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.

Page 13: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

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.

Page 14: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

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.

Page 15: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software
Page 16: Mock objects Rosemary Torrico Bascopé. Introducción Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software

Videos recomendados

• http://www.youtube.com/watch?v=fAb_OnooCsQ

• http://www.youtube.com/watch?v=R9FOchgTtLM