Java Player - ¿Que es un Mock? ¿Para que sirven los Mocks?

Hola hace tiempo que vengo postergando esta explicación, pero bueno vamos a comenzar con una explicación/introducción rápida sobre los Mock.


¿Que es un Mock? 

Un Mock es solo un objeto de prueba. (simple o complejo de acuerdo a cada caso particular).
De acuerdo a la documentación en la wiki un Mock es:


En la Programación Orientada a Objetos (POO) se llaman Mock a los objetos que imitan el comportamiento de objetos reales de una forma controlada. Se usan para probar a otros objetos en test unitarios que esperan mensajes de una clase en particular para sus métodos, al igual que los diseñadores de autos usan un crash dummy cuando simulan un accidente. 
En los test unitarios, los objetos simulados se usan para simular el comportamiento de objetos complejos cuando es imposible o impracticable usar al objeto real en la prueba. De paso resuelve el problema del caso de objetos interdependientes, que para probar el primero debe ser usado un objeto no probado aún, lo que invalida la prueba: los objetos simulados son muy simples de construir y devuelven un resultado determinado y de implementación directa, independientemente de los complejos procesos o interacciones que el objeto real pueda tener.

Los objetos simulados 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 BBDD)
  • El objeto todavía no existe o su comportamiento puede cambiar.
  • Debería incluir atributos o métodos exclusivamente para el testeo.

¿Para que sirven los Mocks?

Volviendo a nuestro articulo, después de leer esto decimos: "Pero entonces para que sirve un Mock, si al final y al cabo es un objeto con datos falsos". 

Supongamos lo siguiente: Estamos trabajando en equipo, por ende mucho de mi codigo impacta a otras personas y viceversa, de todo este "proyecto/s" muchas veces voy codeando cosas que presumo que van a desarrollar mas adelante. Acaba biene la gran pregunta ¿Como vamos a poder probarlo si nuestro código necesita utilizar objetos que todavía no están disponibles?.

Es en este momento donde tiene sentido el uso de objetos “mock”. Utilizaremos estos objetos en los proyectos de pruebas de manera que podamos probar nuestro código simulando el comportamiento de objetos que todavía no están disponibles a través del uso de los mocks.

Un mock deberá implementar el mismo interfaz del objeto que queremos simular. En la clase que define la prueba deberemos definir qué métodos del objeto real queremos que simule el mock, indicando para cada uno de ellos cual es la respuesta esperada cuando reciba unos parámetros predeterminados. Esa respuesta debe ser la misma que esperamos que devuelva el objeto real cuando esté disponible.

Al ejecutar la prueba, cuando el código que queremos probar llame a un objeto que todavía no esté disponible y que hemos simulado con el mock, esa llamada será “interceptada” por el objeto “mock” que hayamos definido y este devolverá la respuesta que hayamos definido y que se deberá corresponder con la que esperamos que sea devuelta por el objeto real cuando esté construido.

La utilización de mocks nos permite independizar el desarrollo de unas partes de la solución de otras. Podemos desarrollar una parte y verificar que funciona correctamente con independencia del resto de partes con las que tenga relación. De esta manera el responsable de cada parte de código puede centrarse en probar que el código que está desarrollando funcione correctamente con independencia del estado de otras partes de la aplicación con las que tenga relación.

Al decir esto nos damos cuenta que estamos desacoplando grandes cosas en cosas mas pequeñas, lo cual nos resulta sumamente útiles a la hora de generar los test.

Ahora que tenemos una introducción mas firme a los mocks, ¿Les parecen útiles?

Saludos

Fuente:

Java Player - ¿Que es un Mock? ¿Para que sirven los Mocks? Java Player  - ¿Que es un Mock? ¿Para que sirven los Mocks? Reviewed by El lado oscuro de java on diciembre 28, 2012 Rating: 5

3 comentarios:

  1. Hola!!
    Felicitaciones por este blog!!
    Te pido por favor que agregues la categoria JavaPlayer a la tira que esta en la parte inicial, ya que es muy util y debemos buscarla para acceder a los articulos.
    Un saludo cordial desde Santiago de Chile

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar

Con la tecnología de Blogger.