160 likes | 313 Views
Mock objects. Rosemary Torrico Bascopé. Introducción. Las Pruebas de unidad han sido aceptadas como la “mejor práctica” para el desarrollo de software.
E N D
Mock objects Rosemary TorricoBascopé
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 MockObject 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 mockobjects 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 mocksque 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 MockObjects 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.
Cuandousarmock 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 MockObjets 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 Mockobjets 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