Nous construisons une copie de Google Photos, et les tests sont vraiment difficiles!
Comment vérifions-nous que notre application Java déclenche les processus ImageMagick corrects ou que les vignettes résultantes sont de la taille correcte et sont réellement des vignettes, et non simplement des images aléatoires de chats? Comment testons-nous différentes versions d’ImageMagick et différents systèmes d’exploitation?
Qu’est-ce qu’il y a dans la Vidéo
00:00 Intro
Nous commençons la vidéo avec une vue d’ensemble de ce qui rend les tests de notre copie de Google Photos si compliqués. Comme dans le dernier épisode, nous avons commencé à extraire des vignettes d’images, mais nous avons maintenant besoin d’un moyen de les tester. Étant donné que cela se fait via un processus ImageMagick externe, nous sommes partis pour une aventure.
01:05 Configuration de JUnit et écriture des premières méthodes de test
Tout d’abord, nous allons configurer JUnit 5. Comme nous n’utilisons pas un cadre comme Spring Boot, cela constitue une excellente occasion d’ajouter le jeu minimal de bibliothèques et de configuration qui nous permet de démarrer avec JUnit. De plus, nous allons écrire des squelettes de méthodes de test, tout en réfléchissant à la manière dont nous aborderions le test de notre code existant et en prenant soin de nommer les méthodes de test, etc.
04:19 Mise en œuvre de la détection de la version ImageMagick
Dans le dernier épisode, nous avons constaté que l’exécution de notre application Java sur différents systèmes conduit à des résultats inattendus ou simplement à des erreurs. Cela est dû au fait que différentes versions d’ImageMagick offrent un ensemble différent d’API que nous devons appeler. Par conséquent, nous devons ajuster notre code pour détecter la version d’ImageMagick installée et également ajouter une méthode de test qui vérifie qu’ImageMagick est effectivement installé, avant d’exécuter des tests.
10:32 Échanges de tests
Comme cela est évident avec la détection des versions d’ImageMagick, le vrai problème est que pour atteindre une couverture de test à 100% avec une variété de systèmes d’exploitation et des versions d’ImageMagick installées, vous auriez besoin d’un ensemble de CI/CD assez élaboré, qui n’est pas dans le cadre de ce projet. Nous discutons donc des avantages et des inconvénients de notre approche.
12:00 Implémentation de @EnabledIfImageMagickIsInstalled
Ce que nous pouvons faire, cependant, est de nous assurer que le reste de notre suite de tests ne s’exécute que si ImageMagick est installé. Ainsi, nous allons écrire une annotation personnalisée JUnit 5 appelée EnabledIfImageMagickIsInstalled
que vous pouvez ajouter à n’importe quelle méthode de test ou même à des classes entières pour activer ce comportement. Si ImageMagick n’est pas installé, les tests ne s’exécuteront tout simplement pas au lieu de présenter un message d’erreur disgracieux.
16:05 Test de création réussie d’une vignette
Le plus grand problème à aborder est : comment pouvons-nous affirmer correctement que les vignettes ont été créées correctement ? Nous aborderons cette question en testant le code de sortie d’ImageMagick, en estimant les tailles des fichiers, en chargeant l’image et en nous assurant qu’elle a le bon nombre de pixels. Tout cela avec l’aide d’AssertJ et de ses SoftAssertions pour combiner facilement plusieurs assertions en une seule.
23:59 Toujours seulement fonctionne sur mon ordinateur
Même après avoir testé notre workflow entier, nous devons encore nous assurer de faire appel à une API ImageMagick différente pour les différentes versions. Nous pouvons rapidement ajouter ce comportement pour supporter IM6 ainsi que IM7, et nous avons terminé.
25:53 Déploiement
Il est temps de déployer l’application sur mon NAS. Et cette fois, tout fonctionne comme prévu !
26:20 Réflexions finales sur les tests
Nous avons fait un certain nombre de tests dans cet épisode. Résumons tous les défis et les stratégies de test pragmatiques que nous avons apprises.
27:31 Quoi d’autre
Nous finirons l’épisode en jetant un coup d’œil à ce qui suit : problèmes de multithreading !
À bientôt dans le prochain épisode.
Source:
https://dzone.com/articles/i-dont-tdd-pragmatic-testing-with-java