Anda di halaman 1dari 30

Desarrollo dirigido

Betapor Pruebas en
Detalle
Mocking

www.iwt2.org
formacion@iwt2.org
03. Mocking

• Aprender qué es el
mocking y para qué
sirve.
• Desarrollar el tipo de
pruebas en las que es
necesario un mock.
• Conocer librerías ya
existentes para facilitar
el desarrollo de
mockings
Objetivos
2
Mocking

1. Todo lo que necesitas


saber de Mocking
2. Librerías de Mocking.
3. Ejemplo con Mockito.
4. Ejemplo con jMock.
5. Para finalizar.

Índice
3
Todos los Conceptos
que Necesitas
Saber sobre
Mocking

4
Todo sobre los Mocks

• Las clases y objetos mock son la solución a un


problema.
• El problema es: ¿cómo podemos hacer pruebas /
implementar un método que depende de otras
clases que puede que aún no estén escritas ni
probadas?
• La solución es desarrollar falsos objetos de falsas
clases que simulen el mínimo comportamiento
posible para poder probar / confiar
Todo sobre Mocks

¿Cómo probaríamos este método?

Self User Pedido Descuentos Database

Descontar
Todo sobre Mocks

• Los mocks también permiten escribir pruebas


que verifiquen un comportamiento en vez de
un resultado esperado.

¿Cómo escribimos un conjunto de


pruebas que verifique que se
invoca el método correcto para
cada valor de entrada?
Todo sobre Mocks

• Ten cuidado de no probar mocks.


• Si escribes un caso de prueba en el que verificas un
resultado devuelto por un mock (en vez de verificar el
código bajo prueba o lo los métodos de un mock fueron
llamados), está probando un mock, no tu código real.

8
Todo sobre Mocks

Glosario
Objetos que devuelven valores
Stub predefinidos al llamar a sus métodos.
Objeto que necesita el código bajo prueba
Dummy pero que nunca será utilizado
Objeto que implementa un atajo y o es
Fake válido para producción.
Objetos que indican las llamadas que han
Spy
recibido sus métodos.
9
Todo sobre Mocks

Glosario
Este término se utiliza de manera más
Double
genérica que el término mock.

Por ejemplo:
• Un stub de represente un acceso a una BDDD
sería un objeto que siempre devolverá valores
prefijados
• Un fake será un objeto que guarda los valores en
un map (por ejemplo)
Todo sobre Mocks

Ejemplos de mocks en plataforma de desarrollos

https://developers.google.com/appengine/docs/java/tools/localunittesting

http://developer.android.com/tools/testing/index.html
Librerías de mocking

12
Librerías de Mocking

En Java

http://code.google.com/p/mockito/

http://www.jmock.org/index.html

Puedes elegir.
Ejemplo con Mockito

14
Ejemplo con Mockito

• A continuación vamos a ver


este ejemplo.
• En este ejemplo vamos a
verificar el correcto
comportamiento del método
checkWeb.
• Todo lo demás son interfaces
por lo que podremos crear
distintos mocks e indicarles el
comportamiento esperado
cuando se invoquen los
métodos.
Ejemplo con Mockito

• Los pasos que vamos a dar para


escribir una prueba son:
1. Crearemos un mock para
cada una de las 4 interfaces
(Logger, Server, Web y
Result).
2. Configuramos el mock de
Server para que espere una
llamada al método connect
pasándole el mock de la
interfaz Web como
parámetro y devuelva el
mock de la interfaz Result.
3. Hacemos lo mismo con el
método isOk para que
devuelva true.
Ejemplo con Mockito

• Con los pasos


anteriores, ya hemos
creado todos los mocks
necesarios. Ahora es el
momento de escribir la
prueba:
3. Creamos el objeto de la
clase WebVerificador.
4. Llamamos al método
bajo prueba checkWeb.
5. Comprobamos que el
método registerWebIsOk
se ha llamado.
Ejemplo con Mockito

La prueba completa con con Mockito quedaría así:


Ejemplo con jMock

19
Ejemplo con jMock

• A continuación vamos a
ver el mismo ejemplo
que hicimos con
Mockito.
• Los pasos a dar serán
los mismos pero los
implementaremos de
manera distinta
utilizando jMock.
Ejemplo con jMock

• En general, los pasos que damos al utilizar la


herramienta jMock son.
1. Declaramos un contexto para la prueba.
2. Creamos los mocks dentro del contexto.
3. Creamos las expectativas (el comportamiento
que esperamos de los mocks).
4. Ejecutamos el código bajo prueba.
5. Comprobamos si se han cumplido todas las
expectativas.
Ejemplo con jMock

• Veamos los pasos en


el código:
0. Creamos un contexto.
1. Creamos los mocks
dentro del contexto a
partir de las interfaces.
2. Definimos las
llamadas que esperan
los mocks y los valores
devueltos (si los
hubiera).
Ejemplo con jMock

3. Creamos el objeto de la
clase bajo prueba e
invocamos el método bajo
prueba.
4. Verificamos que todo el
comportamiento indicado
en el context se ha
cumplido
Ejemplo con jMock

• Nota técnica.
– JMock trae sus propias librerías Harmcrest las
cuáles pueden causar conflicto con Junit 4.
– Si al trabajar con jMock obtienes un mensaje de
error como el del cuadro e abajo, modifica tu
build path para que Junit se cargue en último
lugar o bien haz las pruebas en Junit 3.
java.lang.SecurityException: class "org.hamcrest.TypeSafeMatcher"'s signer information does not match signer
information of other classes in the same package
at java.lang.ClassLoader.checkCerts(Unknown Source)….
Ejemplo con jMock

• A continuación, en las dos siguientes


transparencias, tienes la prueba en jMock con
el código fuente equivalente en Mockito como
comentario, para que puedas comprobar
ambas soluciones.
Ejemplo con jMock

• A continuación, en las dos siguientes


transparencias, tienes la prueba en jMock con
el código fuente equivalente en Mockito como
comentario, para que puedas comprobar
ambas soluciones.
Ejemplo con jMock
Ejemplo con jMock
Para Finalizar

29
Librerías de Mocking

• ¿Conoces algún otro


lenguaje de
programación?
• Busca alguna librería de
mocks, adapta alguno
de los ejemplos
anteriores y compártelo
en el foro.
• El resto de los alumnos
te lo agradecerán

Ejercicios adicionales.
30

Anda mungkin juga menyukai