Explicando Fakes y Objetos Mock a través imágenes

Explicando Fakes y Objetos Mock a través de imágenes

Publicado 13 de febrero 2015 por Bill Wake
Traducción al español por Agustin Villena
Original disponible en http://www.industriallogic.com/blog/mock-objects-pictures/

Los objetos que son interesantes colaboran, pero con algunos colaboradores es difícil trabajar.

Cuando los objetos tienen colaboradores complicados, pordemos usar dobles de prueba (stub, fake y objetos mock) para reemplazar dichos colaboradores para hacer las prueba más fáciles. “Stub”, “fake”, “mock”… las personas interpretan estas etiquetas de forma diferente. Vamos a usar los nombres que usamos en Industrial Logic y tú después podrás sustituir los nombres a tu gusto.:slight_smile:

Vamos a recorrer una serie de imágenes que muestran cómo los microtests trabajan con diversos dobles de prueba.

Los microtests generalmente siguen el patrón Arrange-Act-Assert : Arrange: Organizar un contexto base (por ejemplo, crear y conectar objetos), Act: Actuar para desencadenar un comportamiento, y posteriormente realizar Assert: aseverar y así comprobar que los efectos de esa comportamiento son los esperados. Veremos este patrón reflejado en las siguientes imágenes.

Una prueba básica (“Basada en Estado”)

Vamos a empezar con una simple prueba, sin dobles de prueba involucrados:

  1. Arrange: Configurar el contexto de la prueba: crear un objeto y sus colaboradores (si los hay), y conectarlos entre sí.
  2. Act: La prueba gatilla un comportamiento en el objeto que se está probando.
  3. Interacción: El objeto bajo prueba hace su trabajo, colaborando con otros objetos como debería.
  4. Assert: “Aseveramos” que objeto bajo prueba y/o a sus colaboradores haya cambiado a un estado deseado a partir de la acción realizada sobre aquel.

Este estilo es llamado “basado-en-el-estado” ya que las aseveraciones (asserts) son a menudo sobre el estado observable de algunos objetos.

Dependiendo cuál sea nuestro estilo de pruebas, es posible que la mayoría estas sigan este modelo, y que sólo nos abramos a intentar otros estilos cuando éste modelo no sea suficiente.

Pruebas con Stubs

Algunos colaboradores son causantes de problemas: tienen efectos secundarios, o devuelven resultados aleatorios, o requieren de una cadena de otros colaboradores. Sea la razón que sea, no queremos usar en la prueba el colaborador real (producción).

En el caso más sencillo, podemos sustituirlo por un stub, un colaborador diseñado para hacer lo mínimo. Éste típicamente devuelve una constante como valor de retorno, y hace caso omiso de las llamadas que no necesitan valores de retorno.

Los pasos son los mismos que antes: Arrange, Act, Interacción (detrás de escena), y Assert. La única diferencia es que no tiene sentido consultar al stub, ya que no sabe nada.

Talking Fake (Fake que habla)

Un stub que devuelve siempre el mismo valor puede no sea capaz de desencadenar un comportamiento interesante en el objeto que se está probando. En ese caso, podemos diseñar un talking fake (fake que habla) que devuelve valores uno a la vez desde una lista.

La prueba sigue teniendo la misma estructura Arrange, Act, Assert.; al igual que con los stubs, no tiene sentido el consulta al fake

Listening Fake (Fake que escucha)

Un talking fake simula un lado de la conversación, pero, al igual que en la vida real, escuchar puede ser más importante.

Un listening fake graba lo que el objeto bajo prueba le dice, registrando los valores de los parámetros pasados ​​al fake y/o recordando las llamadas que se le hicieron.

Nuestra estructura de prueba es como las anteriores, con dos ajustes clave:

  • La prueba chequea (assert) los datos que el listening fake recuerda
  • Estos datos son acerca de la conversación entre los objetos, no sobre los efectos sobre el objeto probado

Este estilo de pruebas es llamado "basado en interacciones", porque examina la interacción entre los objetos en lugar de los resultados de su colaboración.

Como veremos a continuación, un listening fake está a medio camino de ser un objeto mock.

Mock Objects (Objetos simulados)

Si reutilizamos un listening fake durante varias pruebas diferentes, podremos notar que las aseveraciones (Assert) son muy similares.

Para limpiar la duplicación entre los métodos de prueba, extraeremos un método con las aseveraciones comunes. Observemos que las aseveraciones se refieren al fake, lo que huele a “envidia de funcionalidad” (ver feature envy).

Por lo tanto, movemos las aseveraciones al fake, y así hemos creado lo que se llama un objeto mock.

La estructura de la prueba ha tenidos algunos cambios:

  • Configurar(Arrange) es más complicado: hay que configurar el mock, así como crear y conectar objetos. Esto puede implicar configurar valores de retorno (como lo hacemos con un fake hablador), o decirle al mock qué esperar en términos de llamadas a métodos y sus argumentos (como lo hacíamos para un fake que escucha).
  • Las aseveraciones (Asserts) se han trasladado al mock; y por ende la aseveración de la prueba sólo le dice al mock que se compruebe a sí mismo.
  • Es posible mezclar y combinar: todavía se puede chequear el estado del objeto bajo prueba o el de sus colaboradores.

Observemos cómo las afirmaciones han cambiado desde nuestra primera prueba: en lugar de comprobar los efectos de una interacción, se comprueba que la interacción entre los objetos sucedió como se esperaba.

Podemos crear un mock manualmente, o utilizar librerías como Mockito o xMock que lo harán por nosotros.

Conclusión

Hemos evolucionado desde pruebas básicas hacia pruebas más complejas que utilizan objetos mock. A pesar que la estructura global para probar se mantiene similar, con los objetos mock cambiamos desde aseverar (assert) sobre los resultados a aseverar que la interacción con un colaborador se produjo según lo previsto.


Faking and Mocking

Si deseas aprender el arte de falsificar (faking) y simular (mocking) a través de ejercicios desafiantes y Preguntas-Respuestas con nuestros expertos, prueba nuestro album de elearning Faking & Mocking, disponible para diversos lenguajes de programación. Las imágenes de este artículo fueron sacadas de allí.

3 Me gusta

Gran recurso, creo que es la mejor explicación que he visto. muy didáctica y sencilla.

Creo que el título puede ser fácilmente solo “Explicando Fakes Stubs y Objetos Mock a través de imágenes” ya que los créditos han sido adecuadamente colocados en el cuerpo y así es más fácil que otros descubran el contenido ya sea por google o por la búsqueda del mismo foro.

Buena sugerencia y realizado