Testen

Testen

Professionell Testen mit JUnit 5

Mehr Spaß und weniger Bauchschmerzen durch clevere Tests

Kursziele

JUnit ist das wohl populärste Unit Testing Framework für Java und bringt in Version 5 das Unit Testing auf ein neues Level. Dieser Workshop gibt einen fundierten Einstieg in das Thema Testing und Softwarequalität und zeigt, wie wir von Anfang an Probleme vermeiden und eine hohe Qualität erreichen.

Wir lernen, wie wir mit Hilfe von JUnit 5 passende und wartbare Tests erstellen, etwa indem wir Äquivalenzklassen und Grenzwerte prüfen. Dazu werden grundlegende Assertions vorgestellt. Ergänzend sind das Testen mit Timeouts sowie von Exceptions von Interesse. Insbesondere werden die vielfältigen Möglichkeiten von parametrisierten Tests und ihre Nützlichkeit in der Praxis thematisiert. Mit richtig gewählten Tests und der Kenntnis auch fortgeschrittener Techniken und Tools, wie Mocks und Stubs mit Mockito und Extract and Override, behalten wir auch Abhängigkeiten gut im Griff.

Die Messung der Testabdeckung zur Aufdeckung noch eher ungetesteter Teile liefert uns weitere wertvolle Informationen, wo wir unsere Tests noch sinnvoll ergänzen können. Anschließend wird die Migration von JUnit 4 auf die neuste Version 5 besprochen, im Speziellen die gemeinsame Ausführung von JUnit-4- und -5-Tests zur schrittweisen, sanften Migration. Abgerundet wird der Workshop durch die Vorstellung von Test Smells, also Dingen, die wir beim Testen vermeiden sollten.

 

Testen

Java Testing für Entscheider

Testautomatisierung für Java-Projekte im Überblick

Kursziele

Das Testen ist ein wichtiger Bestandteil der Software-Entwicklung, wird aber leider oft vernachlässigt. Zur professionellen Software-Entwicklung gehören daher unbedingt die formalisierten und automatisierten Tests.

Diese Schulung vermittelt zunächst einen Überblick über die Schwächen manueller Testverfahren, um dann die Vorteile automatisierter Ansätze für den Test von Java-Anwendungen auszuarbeiten. Es wird die Vorgehensweise des Test-Driven Development (TDD) erläutert, welche den Prozess von Implementierung und nachgelagerten, aufwendigen Tests aufbricht.

Der Schwerpunkt der Schulung liegt in einem Leitfaden für den stufenweisen Übergang zu effizienten, automatisierten Testverfahren. Die Basis hierfür ist eine geeignete Verwaltung von Testdaten und dedizierten Test-Datenbanken. Desweiteren erfolgt ein Überblick über Test-Frameworks und -Werkzeuge für eine erfolgreiche Testautomatisierung. Dabei liegt der Fokus auf Open-Source-Lösungen für den Bereich Java SE und Java EE wie beispielsweise JUnit, Mockito oder Arquillian.

Die Ansätze zur Testautomatisierung werden exemplarisch anhand einer Java-Anwendung demonstriert. Abschließend wird auf die Themen Continuous Integration (CI) am Beispiel des Jenkins-CI-Server und das Testmanagement eingegangen.

 

Testen

Einführung in Testcontainers

Kursziele

Was haben wir erreicht, wenn die Komponenten oder Services unserer Software in Isolation tadellos funktionieren, als Komposition jedoch plötzlich nicht mehr zusammenarbeiten möchten? Um diesem Problem entgegenzuwirken, sind Integration Tests in Ergänzung zu klassischen Unit Tests mit Mocks unverzichtbar. In der Praxis erweisen sich diese jedoch allzu gerne als Quelle sporadischer Build Failures, weil zur Ausführung benötigte Drittsysteme plötzlich von der Bildfläche verschwinden, Inhalte der Testdatenbank sich in der Zwischenzeit geändert haben oder die lokale Umgebung des Kollegen trotz (vermeintlich) gleicher Konfiguration ein gänzlich anderes Verhalten zeigt als meine.

Glücklicherweise kennen wir mit Docker bereits ein wirksames Mittel zur Abstraktion komplexer Ausführungsumgebungen, wissen aber nur allzu gut, dass der Teufel gerne im Detail steckt. An dieser Stelle kommt das Projekt „Testcontainers“ ins Spiel, welches eine leicht verständliche Java API zur Verwendung beliebiger Container in automatisierten Tests zur Verfügung stellt. Vorkonfigurierte Images gängiger Drittsysteme (z.B. Datenbanken, Message Broker, Web Server, Browser) werden praktischerweise gleich mitgeliefert, sodass bereits wenige Zeilen genügen, um eine vollständig lauffähige und vor allem portable Testumgebung aufzuziehen.

Im Rahmen dieses Mini-Trainings lernen wir, wie uns Testcontainers nicht nur bei der Erstellung reproduzierbarer Integration Tests der Persistenzschicht unterstützt, sondern auch zur Automatisierung ganzer Anwendungstests (Use Cases) eingesetzt werden kann. Hierbei betrachten wir auch die Integration mit JUnit 5, Spring Boot und einem Web-Framework wie Apache Wicket oder Vaadin.

 

Testen

Altanwendungen wieder testbar machen

Kursziele

In einer idealen Welt wird Software von Beginn an durchdacht entwickelt und bei jeder Komponente auf eine gute Testbarkeit geachtet. Der Alltag eines Software-Entwicklers sieht freilich anders aus: Monolithischer, schwer verständlicher, unzureichend dokumentierter und fehleranfälliger Code aus vergangenen Tagen muss gefixt oder um neue Funktionalitäten erweitert werden - und das am besten gestern. Gleichzeitig darf bestehende Funktionalität jedoch unter garkeinen Umständen angefasst werden, was zu einer Art "Fear Driven Development" führt, das jegliche Bemühungen zur Verbesserung der Code-Qualität im Keim erstickt.

Um die Wartbarkeit von Altanwendungen langfristig zu erhalten und gleichzeitig sicherzustellen, dass sich gewünschtes Verhalten nicht unbeabsichtigt verändert, werden strukturelle oder gar semantische Refactorings zur Verbesserung des automatisierten Testens aber unabdingbar.

Im Rahmen dieses Mini-Trainings wollen wir uns dabei nicht nur geeignete Refactoring-Techniken aus dem praktischen Alltag anschauen, sondern uns auch über die Organisation des Refactorings selbst unterhalten. Weil alle Theorie grau ist, nehmen wir uns anschließend eine historisch gewachsene „Altanwendung“ zur Brust, welche wir nach allen Regeln der Kunst auseinandernehmen dürfen.

 

Testen

Mocking-Grundlagen mit Mockito

Einsatz von Mockito bei JUnit Tests

Kursziele

In einem Test genutzte Objekte, die nicht aufgerufen werden können oder sollen, müssen durch Stellvertreter-Objekte mit definiertem Verhalten simuliert werden. Für die dynamische Generierung solcher Mock-Objekte wird das Mocking-Framework Mockito eingesetzt. Der Kurs beinhaltet den Einsatz von Mockito bei JUnit Tests.

 

Testen

Testing-Grundlagen mit JUnit

JUnit-Tests Einführung

Kursziele

Zur Softwareentwicklung gehören unbedingt formelle und automatisierbare Tests. Die Basis dafür bilden Unit-Tests, die jweils einzelne Bausteine - Units - der Anwendung formell testen. Sie erlernen in diesem Kurs Grundlagen professioneller Tests mit JUnit.

 

Testen

Web Hacking

Pentesting und Angriffsversuche auf Webanwendungen

Kursziele

Mit Entwurfsmustern erhält man bewährte Rezepte für wiederkehrende Probleme beim Entwurf und bei der Entwicklung von Software. Die Muster + Best Practices, die in dieser Schulung vorgestellt werden, helfen erfolgreich Jave EE Systeme zu verwirklichen. Sie bieten erprobte Lösungen für typische Probleme mit Java EE-Technologien wie JSF, EJB, Spring oder JTA. Aufgrund der Schwächen und Unzulänglichkeiten der J2EE-Spezifikation 1.4 gab es eine Vielzahl solcher Muster. Mit dem Schritt von J2EE 1.4 nach JEE 5.0 hat sich die Entwicklung komplexer, verteilter und komponentenbasierter Anwendungen stark vereinfacht. Umsteiger erhalten im Seminar eine Übersicht über die relevanten Änderungen der Muster. Dieser Kurs ist eine ideale Ergänzung zu EJB 3, JSF, Spring und Hibernate.

 

Testen

Testing für Java EE / Jakarta EE

Testautomatisierung für Java-EE-Anwendungen

Kursziele

Diese Schulung vermittelt erfahrenen Java-Entwicklern, wie sich der bekannte Ansatz des Unit-Tests auch im komplexen Java-Enterprise-Umfeld nahtlos und vorteilhaft nutzen lässt. Dazu erfolgt zunächst ein Überblick der Grundlagen des Test-Framework JUnit.
Weiterhin werden Lösungsmöglichkeiten für den Test mit Mock-Objekten erarbeitet und die Nutzung des Mocking-Framework Mockito gezeigt. Schließlich wird auf die Bereitstellung von Testdaten und die Befüllung von dedizierten Test-Datenbanken eingegangen.

Der Schwerpunkt der Schulung liegt auf der Fragestellung, wie sich die Aspekte Persistenz (JPA), Geschäftslogik (CDI bzw. EJB), GUI einer Web-Anwendung (JSF) und Schnittstellen (Web-Services) einer beispielhaften Java-EE-Anwendung automatisiert testen lassen. Dazu werden für jeden dieser Test-Aspekte entsprechende und im Projekt-Einsatz bewährte Java-Test-Frameworks eingehend behandelt.

Zum Abschluss werden das Thema Continuous Integration (CI) und der CI-Server Jenkins skizziert.

 

Testen

Java Test und Qualitätssicherung (Java SE und EE)

Testautomatisierung und Qualitätssicherung in Java-Projekten

Kursziele

In diesem anspruchsvollen Kurs steht eine ganzheitliche Betrachtung der Themen Test und Qualitätssicherung für Java-Projekte im Mittelpunkt. Es werden die aktuelle Vorgehensweise ("state of the art") sowie die dabei üblicherweise eingesetzten Frameworks und Werkzeuge durchgängig anhand einer vorgefertigten Java-EE-Beispielsanwendung geschult. Die Grundlage hierfür bilden das JUnit-Framework, die testgetriebene Entwicklung, Mocking-Techniken und die Testdaten-Bereitstellung. Die technische Herausforderung von Unit-Tests im Java-Enterprise-Umfeld wird durch die Frameworks Arquillian, Selenium und Drone unterstützt. Neben einer zielführenden Software-Architektur stellen statische Code-Analyse und Refactoring-Maßnahmen die Grundpfeiler der Qualitätssicherung (QS) dar. Die Continuous Integration (CI) mit Werkzeugen wie Jenkins bzw. Hudson bildet die Klammer um die Themen Test und QS.

 

Testen

Testing mit JUnit und Mocking

Automatisiertes Testen in Java mit JUnit und Mocking-Frameworks

Kursziele

In dieser Schulung erlernen Sie die Grundlagen für das automatisierte Testen von Java-Anwendungen. Die Maßnahmen zur Einführung von Testautomatisierung werden erläutert und die verschiedenen Arten von automatisierten Tests werden charakterisiert.

Das Framework JUnit hat sich als de-facto-Standard für Unit-Tests im Java-Umfeld etabliert. Als eine Vorgehensweise, um eine hohe Testüberdeckung in den Java-Projekten zu gewährleisten, wird das Test-Driven Development (TDD) vorgestellt.

In einem JUnit-Test genutzte Objekte, die nicht aufgerufen werden können oder sollen, müssen durch Stellvertreter-Objekte mit definiertem Verhalten simuliert werden. Für die dynamische Generierung solcher Mock-Objekte werden Mocking-Frameworks wie insbesondere Mockito verwendet. Mit dem zusätzlichen Framework PowerMock kann fehlende Funktionalität für ein Mocking-Framework wie Mockito ergänzt werden.

 

Testen

Java Testing und Code Quality

Testautomatisierung und Qualitätssicherung in Java-Projekten

Kursziele

Wir möchten in dieser Schulung eine ganzheitliche Betrachtung der Themen Testautomatisierung und Qualitätssicherung für Java-Anwendungen in den Mittelpunkt stellen. Das vermittelte Wissen und die besprochenen Vorgehensweisen sind gleichermaßen in einem Projekt basierend auf der Java Standard Edition (Java SE) oder der Java Enterprise Edition (Java EE) einsetzbar.

In unserer Schulung lernen Sie die Grundlagen zum Thema Java-Code-Qualität. Neben einer zielführenden Software-Architektur und einem methodischen Software-Entwicklungsprozess stellen statische Code-Analyse und Refactoring-Maßnahmen die Grundpfeiler der Qualitätssicherung dar.

Der andere große Schulungsteil behandelt die Grundlagen von automatisierten Software-Tests. Die Teilnehmer dieser Schulung erlangen Kenntnisse im Umgang mit den Frameworks JUnit und Mockito, so dass sie verschiedene Testarten wie Unit-, Integrations- oder Abnahme-Test für ihr Java-Projekt erstellen und ausführen können. Außerdem wird ein Einblick in den Ansatz der testgetriebenen Entwicklung gegeben.

Die Continuous Integration mit dem Werkzeug Jenkins bildet die Klammer um die Themen Test und Qualitätssicherung.