Testeando Spring
En este artículo muestro diferentes maneras de testear una aplicación basada con SpringBoot.
La URL del proyecto de ejemplo es esta: https://github.com/chuchip/demoSpringTest
Este programa tiene un simple controlador y una conexión con MongoDB. En el ejemplo uso una conexión a Atlas. Si no conoces esta magnifica herramienta, te animo a que veas está pagina y levantes tu propia base de datos en la nube: https://cloud.mongodb.com
Este programa realiza los siguientes tipos de test:
DemoSpringTestApplicationTests que no usa Mockito y es un test completo
Levanta una instancia de MongoDB embebida para realizar las pruebas y realiza las llamadas a nuestro controlador usando TestRestTemplate. En este caso las llamadas son reales, es decir se conecta por HTTP y el test es el más completo posible pues pasa por todas las partes de nuestro programa.
MockMvcTestApplication
Las peticiones web son realizadas a través de MockMVC y por lo tanto vamos a la URL del controlador. Se levanta una instancia embebida de MongoDB. También es un test completo.
MockitoTestApplication:
Es el test mas simple y también el más rápido. Usando Mockito no se levanta la aplicación de SpringBoot ni usa MongoDB. Las peticiones al controlador se hacen llamando a las funciones, por lo cual no se comprueban las URL.
MockitoWebTestApplication:
Lanza la aplicación entera, es decir se levanta el servidor web pero usamos Mockito para crear el controlador y el repositorio de MongoDB. La base de datos en este caso se levanta pero no la usamos ya que mockeamos el repositorio.
No os voy a dar mucho la chapa de como funcionan las diferentes clases, he preferido comentar el código que creo que se explica el mismo y dejar, al que este interesado, que mire y juegue.