Proyecto IntelliJ de partida para la realización de un par de ejercicios con Mockito en clase de Verificación y Validación del Grado en Ingeniería Informática de la Universidad de de Zaragoza.
Este proyecto contiene:
-
Los ejemplos de la clase de teoría, en el paquete
es.unizar.eina.vv6f.pruebas.mockito.ejemplo
.Estos ejemplos están basados en la página web «Unit tests with Mockito – Tutorial» de Lars Vogel y Fabian Pfaff. Vogella. Version 1.9. 10-4-2017. http://www.vogella.com/tutorials/Mockito/article.html [accedido el 28-4-2020].
-
Esqueleto para el problema de mocking con el patrón sujeto observador (paquete
es.unizar.eina.vv6f.pruebas.mockito.ejercicio1
)Este problema está basado en el tutorial «Getting Started» de JMock. 2012. http://jmock.org/getting-started.html [accedido el 29-4-2020].
-
Esqueleto para el problema de stubbing (paquete
es.unizar.eina.vv6f.pruebas.mockito.ejercicio2
)
En proyecto suministrado en este repositorio no está configurado todavía para utilizar Mockito.
Para configurarlo:
- Project Structure | Libraries | + (New Project Library) | From Maven…
- Buscad org.mockito:mockito-core:3.3.3
- Seleccionad Sources y JavaDocs
Una vez configurado, comprobad que funciona ejecutando los test del paquete es.unizar.eina.vv6f.pruebas.mockito.ejemplo
Implementación del patrón sujeto-observador en el paquete es.unizar.eina.vv6f.pruebas.mockito.ejercicio1
-
Escribid una prueba JUnit4 para la clase
MyPublisher
:- Cread un objeto mock de la interfaz
Subscriber
. - Suscribidlo a un objeto de la clase
MyPublisher
. - Publicad un mensaje en el objeto de la clase
MyPublisher
. - Comprobad sobre el mock si la interacción ha sido correcta.
- Cread un objeto mock de la interfaz
-
Implementad y corregid la clase
MyPublisher
hasta que el test no detecte fallos. -
Añadid pruebas adicionales que cubran los siguientes escenarios:
- Dos mocks y un mensaje a ambos
- Dos mocks de la interfaz Subscriber se suscriben al
Publisher
. - El
Publisher
publica un mensaje. - Comprobad que los dos mocks reciben el mensaje.
- Dos mocks de la interfaz Subscriber se suscriben al
- Dos mocks y dos mensajes distintos a ambos
- Dos mocks y dos mensajes, pero entre la suscripción del
primer y el segundo mock, el
Publisher
publica el primer mensaje.
- Dos mocks y un mensaje a ambos
Sustitución de la clase DataInputStream
en el paquete
es.unizar.eina.vv6f.pruebas.mockito.ejercicio2
, para evitar
tener que generar ficheros reales para las pruebas
-
Escribid tests en JUnit para probar el método
escribirResumen
, recorriendo los cuatro caminos identificados en la clase de pruebas de caminos con profundidad:- Fichero vacío (con 0 ventas)
- Fichero con solo una venta
- Fichero con dos ventas de dos clientes distintos
- Fichero con 4 ventas de dos clientes distintos c1 y c2. Las dos primeras son del cliente c1 y las dos últimas, del cliente c2.
En lugar de ficheros binarios reales, utilizad Mockito para crear objetos sustitutos (stubs, en concreto) de la interfaz
DataInput
. Solo configurad las pruebas y ejecutarlas. No comprobéis de momento en el test los resultados de la ejecución (es decir, no redirijáis de momento la salida estándar a ningún otro sitio ni hagáis ninguna aserción sobre el contenido de la misma). -
Comprobad en IntelliJ si se alcanza una cobertura del 100 % en el método
escribirResumen
. -
Utilizad Mockito para añadir una prueba en la que inyectar el error necesario para alcanzar una cobertura del 100 %.
-
Terminad de automatizar las pruebas, comprobando los resultados de la ejecución de las mismas (redirigiendo la salida estándar a un sustituto, que puede ser en este caso un
ByteArrayOutputStream
).
Aunque es precisamente lo que estamos haciendo en este ejercicio, no es recomendable hacer mocks de clases que no nos pertenezcan.