Ich TDD nicht: Pragmatisches Testen mit Java

Wir bauen eine Google Photos Klon und das Testen ist verdammt schwer!

Wie testen wir, dass unsere Java Anwendung die richtigen ImageMagick Prozesse startet oder dass die resultierenden Vorschaubilder die richtige Größe haben und tatsächlich Vorschaubilder sind, nicht nur zufällige Katzenbilder? Wie testen wir verschiedene ImageMagick Versionen und Betriebssysteme?

Was gibt es im Video

00:00 Intro 

Wir beginnen das Video mit einer allgemeinen Übersicht, was das Testen unseres Google Photos Klons so schwierig macht. Wie im letzten Video haben wir begonnen, Vorschaubilder aus Bildern zu extrahieren, aber wir brauchen jetzt einen Weg, um das zu testen. Da dies über einen externen ImageMagick-Prozess erfolgt, sind wir auf einem Abenteuer.

01:05 Einrichten von JUnit und Schreiben der ersten Testmethoden

Zunächst werden wir JUnit 5 einrichten. Da wir kein Framework wie Spring Boot verwenden, dient dies als großartige Übung, um die minimale Anzahl von Bibliotheken und Konfiguration hinzuzufügen, die uns mit JUnit auf die Beine bringt. Darüber hinaus werden wir einige Testmethoden-Skelette schreiben und darüber nachdenken, wie wir unseren vorhandenen Code testen und auf die Benennung von Testmethoden usw. achten würden.

04:19 Implementierung der ImageMagick-Versionseingrenzung

Im letzten Teil haben wir festgestellt, dass das Ausführen unserer Java-Anwendung auf verschiedenen Systemen zu unerwarteten Ergebnissen oder einfach nur zu Fehlern führt. Das liegt daran, dass verschiedene ImageMagick-Versionen eine unterschiedliche Reihe von APIs bieten, die wir aufrufen müssen. Daher müssen wir unseren Code anpassen, um die installierte ImageMagick-Version zu erkennen, und auch eine Testmethode hinzufügen, die prüft, ob ImageMagick tatsächlich installiert ist, bevor irgendwelche Tests ausgeführt werden.

10:32 Handels-offs beim Testen 

Wie bei der Erkennung von ImageMagick-Versionen ersichtlich ist, besteht das eigentliche Problem darin, dass man für 100% Testabdeckung mit einer Vielzahl von Betriebssystemen und installierten ImageMagick-Versionen ein ziemlich ausgeklügeltes CI/CD-Setup benötigen würde, was wir im Rahmen dieses Projekts nicht haben. Daher diskutieren wir die Vor- und Nachteile unserer Vorgehensweise.

12:00 Implementierung von @EnabledIfImageMagickIsInstalled 

Was wir jedoch tun können, ist sicherzustellen, dass der Rest unseres Test-Suites nur dann ausgeführt wird, wenn ImageMagick installiert ist. Daher werden wir eine benutzerdefinierte JUnit 5-Annotation namens EnabledIfImageMagickIsInstalled schreiben, die Sie zu jeder Testmethode oder sogar zu ganzen Klassen hinzufügen können, um dieses Verhalten zu aktivieren. Wenn ImageMagick nicht installiert ist, werden die Tests einfach nicht ausgeführt, anstatt eine hässliche Fehlermeldung anzuzeigen.

16:05 Testen der erfolgreichen Erstellung von Thumbnails

Das größte Problem, das es zu bewältigen gilt, ist: Wie stellen wir sicher, dass Miniaturansichten korrekt erstellt wurden? Wir werden diese Frage angehen, indem wir den Exit-Code von ImageMagick testen, Dateigrößen schätzen und auch das Bild laden und sicherstellen, dass es die korrekte Anzahl an Pixeln hat. All dies mit Hilfe von AssertJ und seinen SoftAssertions, um mehrere Assertions leicht in einer zu kombinieren.

23:59 Funktioniert Immer Noch Nur Auf Meinem Rechner

Selbst nachdem wir unser gesamtes Workflow getestet haben, müssen wir noch sicherstellen, eine andere ImageMagick-API für verschiedene Versionen aufzurufen. Wir können dieses Verhalten schnell hinzufügen, um sowohl IM6 als auch IM7 zu unterstützen, und sind dann fertig.

25:53 Bereitstellung

Zeit, die Anwendung auf mein NAS zu deployen. Und diesmal funktioniert alles wie erwartet!

26:20 Letzte Testüberlegungen

In dieser Episode haben wir eine recht große Menge an Tests durchgeführt. Lasst uns alle Herausforderungen und pragmatischen Teststrategien zusammenfassen, über die wir gelernt haben.

27:31 Nächste Schritte

Wir werden die Episode beenden, indem wir einen Blick auf das Nächste werfen: Probleme mit Multithreading!

Wir sehen uns in der nächsten Episode.

Source:
https://dzone.com/articles/i-dont-tdd-pragmatic-testing-with-java