We zijn aan het bouwen van een Google Photos-kloon en het testen is verdomd moeilijk!
Hoe testen we dat ons Java app de juiste ImageMagick-processen start of dat de resulterende miniaturen de juiste grootte hebben en inderdaad miniaturen zijn, niet gewoon willekeurige kattenfoto’s? Hoe testen we verschillende ImageMagick-versies en besturingssystemen?
Wat zit er in de Video
00:00 Intro
We beginnen de video met een algemeen overzicht van wat het testen van onze Google Photos-kloon zo lastig maakt. Net als in de vorige aflevering, begonnen we met het extraheren van miniaturen uit afbeeldingen, maar we hebben nu een manier nodig om dat te testen. Aangezien dit gebeurt via een externe ImageMagick-procedure, zijn we op een rit.
01:05 Instellen van JUnit en Schrijven van de Eerste Testmethoden
Eerst zullen we JUnit 5 instellen. Aangezien we geen framework zoals Spring Boot gebruiken, dient het als een uitstekende oefening om de minimale set bibliotheken en configuratie toe te voegen die ons op gang brengt met JUnit. Bovendien zullen we enkele testmethodeskletskers schrijven, terwijl we nadenken over hoe we onze bestaande code zouden testen en zorg dragen voor de naamgeving van testmethoden, enzovoort.
04:19 Implementeren van ImageMagick-versiedetectie
In de vorige aflevering merkten we op dat het uitvoeren van onze Java-app op verschillende systemen leidt tot onverwachte resultaten of gewoon fouten. Dit komt omdat verschillende ImageMagick-versies een ander aantal API’s bieden die we moeten aanroepen. Daarom moeten we ons code aanpassen om de geïnstalleerde ImageMagick-versie te detecteren en ook een testmethode toevoegen die controleert of ImageMagick daadwerkelijk is geïnstalleerd, voor het uitvoeren van tests.
10:32 Afwegingen bij testen
Zoals blijkt uit het detecteren van ImageMagick-versies, is het echte probleem dat om 100% testdekking te bereiken met een verscheidenheid aan besturingssystemen en geïnstalleerde ImageMagick-versies, je een behoorlijk uitgebreid CI/CD-systeem nodig hebt, wat niet binnen het kader van dit project valt. Dus we bespreken de voor- en nadelen van onze aanpak.
12:00 Implementeren van @EnabledIfImageMagickIsInstalled
Wat we echter kunnen doen, is ervoor zorgen dat de rest van onze testsuite alleen draait als ImageMagick is geïnstalleerd. Daarom schrijven we een aangepaste JUnit 5-annotatie genaamd EnabledIfImageMagickIsInstalled
die je kunt toevoegen aan elke testmethoden of zelfs hele klassen om dit gedrag te activeren. Als ImageMagick niet is geïnstalleerd, zullen de tests gewoon niet uitgevoerd worden in plaats van een lelijke foutmelding weer te geven.
16:05 Testen van succesvolle miniatuurcreatie
Het grootste probleem om aan te pakken is: Hoe kunnen we correct vaststellen dat miniaturen correct zijn aangemaakt? We zullen deze vraag benaderen door te testen op de afsluitcode van ImageMagick, schatting van bestandsgroottes, en ook het laden van de afbeelding, en ervoor zorgen dat deze het juiste aantal pixels heeft. Dit alles met behulp van AssertJ en zijn SoftAssertions om gemakkelijk meerdere uitspraken in één te combineren.
23:59 Nog steeds alleen werkt op mijn machine
Zelfs nadat we onze hele workflow hebben getest, moeten we nog steeds ervoor zorgen dat we een andere ImageMagick-API aanroepen voor verschillende versies. We kunnen snel dat gedrag toevoegen om IM6 en IM7 te ondersteunen, en we zijn klaar.
25:53 Implementatie
Tijd om de applicatie te implementeren op mijn NAS. En deze keer werkt alles zoals verwacht!
26:20 Laatste testgedachten
We hebben in deze aflevering een behoorlijk aantal tests uitgevoerd. Laten we alle uitdagingen en pragmatische teststrategieën opsommen die we hebben geleerd.
27:31 Wat volgt
We zullen de aflevering afsluiten door te kijken naar wat er nu komt: problemen met multithreading!
Tot ziens in de volgende aflevering.
Source:
https://dzone.com/articles/i-dont-tdd-pragmatic-testing-with-java