Estamos construyendo una réplica de Google Photos y ¡la prueba es muy difícil!
¿Cómo comprobamos que nuestra aplicación Java inicia los procesos de ImageMagick correctos o que las miniaturas resultantes tienen el tamaño adecuado y, de hecho, son miniaturas, no solo fotos al azar de gatos? ¿Cómo probamos diferentes versiones de ImageMagick y sistemas operativos?
¿Qué hay en el Video
00:00 Intro
Comenzamos el video con una visión general de lo que hace tan complicada la prueba de nuestra réplica de Google Photos. Como en el episodio anterior, comenzamos a extraer miniaturas de imágenes, pero ahora necesitamos una manera de probar eso. Dado que esto se hace a través de un proceso externo de ImageMagick, estamos en un viaje.
01:05 Configurando JUnit y Escribiendo los Primeros Métodos de Prueba
Primero, configuraremos JUnit 5. Como no estamos usando un marco como Spring Boot, sirve como un excelente ejercicio para agregar el conjunto mínimo de bibliotecas y configuración que nos permite comenzar con JUnit. Además, escribiremos algunos esquemas de métodos de prueba, pensando en cómo abordaríamos la prueba de nuestro código existente y prestando atención al nombramiento de los métodos de prueba, etc.
04:19 Implementando Detección de Versiones de ImageMagick
En el último episodio, notamos que al ejecutar nuestra aplicación Java en diferentes sistemas se producen resultados inesperados o simplemente errores. Esto se debe a que diferentes versiones de ImageMagick ofrecen un conjunto diferente de APIs que necesitamos llamar. Por lo tanto, debemos ajustar nuestro código para detectar la versión de ImageMagick instalada y también agregar un método de prueba que verifique que ImageMagick esté realmente instalado, antes de ejecutar cualquier prueba.
10:32 Análisis de Trade-Offs
Como es evidente al detectar versiones de ImageMagick, el verdadero problema es que para alcanzar una cobertura de pruebas del 100% con una variedad de sistemas operativos y versiones instaladas de ImageMagick, se necesitaría una configuración de CI/CD bastante elaborada, que no está dentro del alcance de este proyecto. Por lo tanto, estamos discutiendo los pros y los contras de nuestro enfoque.
12:00 Implementando @EnabledIfImageMagickIsInstalled
Sin embargo, lo que podemos hacer es asegurarnos de que el resto de nuestra suite de pruebas solo se ejecute si ImageMagick está instalado. Por lo tanto, escribiremos una anotación personalizada de JUnit 5 llamada EnabledIfImageMagickIsInstalled
que puedes agregar a cualquier método de prueba o incluso a clases completas para habilitar dicho comportamiento. Si ImageMagick no está instalado, las pruebas simplemente no se ejecutarán en lugar de mostrar un mensaje de error desagradable.
16:05 Pruebas de Creación de Miniaturas Exitosa
El mayor problema que debemos abordar es: ¿Cómo asegurarnos de que las miniaturas se crearon correctamente? Aproximaremos esta pregunta probando el código de salida de ImageMagick, estimando los tamaños de archivo, y también cargando la imagen, y asegurándonos de que tenga la cantidad correcta de píxeles. Todo esto con la ayuda de AssertJ y sus SoftAssertions para combinar fácilmente múltiples afirmaciones en una.
23:59 Todavía Solo Funciona en Mi Máquina
Incluso después de haber probado todo nuestro flujo de trabajo, aún necesitamos asegurarnos de llamar a una API diferente de ImageMagick para diferentes versiones. Podemos agregar rápidamente ese comportamiento para dar soporte tanto a IM6 como a IM7, y hemos terminado.
25:53 Implementación
Es hora de implementar la aplicación en mi NAS. Y esta vez, todo funciona según lo esperado!
26:20 Pensamientos Finales sobre Pruebas
Hicimos una cantidad justa de pruebas en este episodio. Vamos a resumir todos los desafíos y estrategias de prueba pragmáticas que aprendimos.
27:31 Qué Sigue
Terminaremos el episodio echando un vistazo a lo que sigue: problemas de multithreading!
Nos vemos en el próximo episodio.
Source:
https://dzone.com/articles/i-dont-tdd-pragmatic-testing-with-java