Posts

Posts mit dem Label "test" werden angezeigt.

Clean Code in JUnit 5 und Spring Boot Tests

Bild
Clean Code ist auch im Unit-Test Pflicht. Hier schreibe ich eine saubere JUnit 5 Testklasse und übersetze sie anschließend in einen Spring Boot Test. Außerdem zeige ich ein paar JUnit 5 Features zum Parametrisieren von Tests und zum Testen von Exceptions. (JUnit 5 Logo 😮) Clean Code im JUnit Test Das Schreiben von möglichst einfachem und gut wartbaren Code (Clean Code) ist für viele Entwickler selbstverständlich. Die Unit-Tests zu diesem Code haben leider häufig eine schlechtere Code-Qualität. Dabei sollte es eigentlich bekannt sein, dass auch Unit-Tests leicht verständlichen und gut wartbaren Code benötigen, insbesondere wenn sie regelmäßig und automatisiert ausgeführt werden. In einem der bekanntesten Bücher zum Thema Clean Code von Robert Martin , gibt es deshalb ein eigenes Kapitel zu JUnit. Ich zeige euch nun einen JUnit Test und erkläre dann, welche Clean Code Prinzipien ich dabei angewendet habe. Getestet wird der InMemoryItemStore , den ich in einem früheren Blog-Post kernkonz

Automatisiertes JUnit-Testing von asynchronen Methoden

Falls Du in Deinen Unit-Test Klassen "Thread.sleep" verwendest, um z.B. die Ergebnisse asynchroner Methoden zu testen, dann zeige ich Dir im folgenden Artikel die clean code Variante. Was ist das Problem mit Thread.sleep in Unit-Tests? Unser Team entwickelt zur Zeit einen Import Service, der große Datenmengen einliest und verarbeitet. Der Import Prozess dauert relativ lange, daher ist eine asynchrone Verarbeitung des Imports eine nahe liegende Lösung, die vereinfacht so aussehen könnte: public void importDataAsync() throws Exception {   // Java 8 lambda expression for a thread.   Runnable asyncImport = () -> {     // Import data takes a long time.     // Writes state 'done' in database,      // when import finished successful.   };   // Java 8 solution to run threads asynchronously.   CompletableFuture.runAsync(asyncImport)n       .orTimeout(120, TimeUnit.SECONDS); } Wie könnte nun ein einfacher JUnit Test dazu aussehen? An anderen Stellen fand ich diese Thread.sle