SprintBoot Teil 6: jUnit-Tests für den ReST-Controller
Es werden Unit-Tests für den REST-Controller erstellt. Dazu wird eine gemockte Umgebung konfiguriert. Das Testframework von Spring mit seinen zahllosen Klassen wird vorgestellt.
Es werden Unit-Tests für den REST-Controller erstellt. Dazu wird eine gemockte Umgebung konfiguriert. Das Testframework von Spring mit seinen zahllosen Klassen wird vorgestellt.
Es wird die eigentliche REST-API für unsere Adressen erstellt: Methoden für PUT, GET, POST und DELETE. Die API wird per PowerShell oder Bash aufgerufen, um sie auszuprobieren.
Die zentralen CRUD-Funktionen des Repositories werden getestet. Dazu wird die given-when-then-Methodik verwendet und in jUnit jeweils Testmethoden implementiert.
Es werden die Abhängigkeiten für ein Model angefügt, eine Modelklasse erstellt und annotiert. Die OOP-Hintergründe für Repositories werden kurz an UML-Klassendiagrammen erläutert
Postgres darf natürlich nicht in der Serie „Datenbanken aus dem Container“ fehlen. Im Tutorial werden die wesentlichen Befehle dargestellt, um einen sich selbst befüllenden DB-Container zu erstellen.
Mit MariaDB lassen sich besonders leicht Container aufsetzen und mit Daten befüllen. In diesem Tutorial werden Voraussetzungen für den Container zusammengetragen, die nötigen Befehle zusammengestellt. Und das Ergebnis kann sich sehen lassen: MariaDB-Container sind nur halb so groß wie MySQL-Container und nur ein Viertel der MS-Boliden.
Datenbankserver lassen sich auf so ziemlich jedem Betriebssystem aufsetzen. Es ist jedoch häufig wichtig, unterschiedliche Server, definierte Datenbestände oder reproduzierbare Systemumgebungen auf Knopfdruck zu erstellen: für diese Anwendungsfälle spielen Container eine herausragende Rolle. Im folgenden Infotext wird kurz beschrieben, wie ein Container mit einem MS-SQL-Server aufgesetzt und benutzt werden kann. Es werden Voraussetzungen für den Container zusammengetragen, die nötigen Dateien erstellt und Befehle genannt. Am Ende können wir individuelle versionierbare Datenbanken auf Knopfdurck zur Verfügung stellen. Oder, um es zu buzzworden: “Infrastructure as Code”.
Container sind so etwas wie ein kleiner Bruder der virtuellen Maschinen: schlanker, agiler, wendiger. Das bekannteste Tool, um Container zu administrieren ist Docker. Dieses Tutorial beschäftigt sich mit den Grundlagen der Containernutzung mit Docker.
Zugegeben: Die meisten Leute meinen, wenn sie von git reden, eher Plattformen wie GitHub, GitLab oder Bitbucket. Wir sollten diese zentralen Repositories also schleunigst einbinden: klonen, holen, hochladen, anmelden per Token oder SSH-Schlüssel und festlegen, was gar nicht erst ins Repository gehört.
Ein großer Vorteil von git ist, dass wir zeitgleich an unterschiedlichen Komponenten eines Projekts arbeiten können, und diese Entwicklungen zu definierten Zeitpunkten wieder zusammenführen können. Diese Entwicklung in Branches minimiert Seiteneffekte, fordert aber etwas Grips: Merge, Rebase und Konflikte, dazu Werkzeuge zum Rückgängigmachen, Zwischenparken und Markieren von Versionen.
Bevor wir uns in die weite Welt von Github, Gitlab, Bitbucket usw. aufmachen wollen wir erst einmal verstehen, was lokal passiert und ein paar Begriffe klären: Was ist ein Commit? Was ist ein Repository? Was ist der Workspace? Was ist die Stage? In welchen Schritten versioniere ich? Wie gestalte ich meine Commit-Nachrichten?
Ein Ausgangspin kann eine LED direkt treiben, ein Relais oder einen Lüfter aber nicht. Hier schaltest Du mit pinMode() und digitalWrite() mehrere LEDs (Ampel), berechnest den Vorwiderstand für 3,3 V und 5 V, liest zulässige Pin- und Summenströme aus dem Datenblatt, stellst eine Strombilanz auf und treibst größere Lasten über Transistor, MOSFET oder Relais mit Freilaufdiode – Low-Side und High-Side. Für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno.
Kein Mikrocontroller-Projekt ohne blinkende LED. Hier richtest Du die Arduino-IDE mit Board-Paket, Treiber und Port ein, lernst den Aufbau eines Programms mit setup() und loop() kennen, lässt eine LED blinken und liest einen Taster ein – für ESP32-C6, ESP32, ESP8266 (NodeMCU) und Arduino Uno. Zum Schluss geht es um die typischen Fehler beim Hochladen.
Das Tool PlantUML ist hervorragend geeignet, um Klassendiagramme direkt in Dokumentationen wie Readme.md-Dateien des Repositorys oder in Kommentaren zu integrieren, sie aus Programmcode direkt zu generieren und sie in einem Versionskontrollsystem zu versionieren. In diesem Infotext stelle ich vor, wie mit PlantUML die unterschiedlichen Notationsmittel von Klassendiagrammen genutzt werden können, mit welchen Einstellungen sie nahe am UML-Standard bleiben und wie sie sich aufhübschen lassen.
Ein großes Problem bei Objekt- und Klassenbeziehung ist die starke Kopplung unterschiedlicher Klassen aneinander. Der Austausch von Verhalten ist so nur mit großem Aufwand möglich. Das Konzept der Abstraktion bietet hier in Form von abstrakten Klassen und Interfaces die Möglichkeit, Komponenten lose zu koppeln. Der Artikel zeigt, wie beide im UML-Klassendiagramm notiert werden, worin sie sich von konkreten Klassen unterscheiden und welche Fehler häufig passieren.
Zentrales Element der Code-Wiederverwendung in der objektorientierten Programmierung (OOP) ist die Vererbung. Am Beispiel von Bankkonten werden hier das OOP-Prinzip Vererbung und die darauf aufbauenden Konzepte (z. B. Überschreiben, Konstruktoraufruf der Oberklasse, protected) erklärt – und wie Du aus vorhandenen Klassen eine Oberklasse entwickelst und Vererbung im UML-Klassendiagramm richtig notierst.
Mit einzelnen Objekten erreicht man in der objektorientierten Programmierung (OOP) noch nicht viel. Erst im Zusammenspiel als Objektsammlungen und über Objektinteraktionen entwickelt die OOP ihre Stärken. Der folgende Text behandelt die Fragen: Welche Objektbeziehungen gibt es? Was unterscheidet Abhängigkeit, Assoziation, Aggregation und Komposition? Wie liest und begründet man Multiplizitäten, und woran erkennt man die passende Beziehung in Anforderungstexten, Quelltexten und Entwurfsmustern? Versuch der Klärung.
Kapselung ist ein Konzept der objektorientierten Programmierung (OOP), das verhindern soll, dass Anpassungen des Codes zu Inkonsistenzen führen. Der Zustand der Objekte soll nicht direkt änderbar sein, sondern nur über Methoden, die ggf. weitere Anpassungen vornehmen können: Getter und Setter. Der Artikel stellt die vier Sichtbarkeiten +, -, # und ~ vor und zeigt, wie Du Anforderungen wie „nur lesbar“ im Klassendiagramm umsetzt.
Das UML-Klassendiagramm ist die zentrale Modellierungssprache der objektorientierten Programmierung (OOP). Dieser Einstiegsartikel zeigt den Aufbau einer Klasse, die Darstellung ihrer Member (Attribute und Methoden), Überladung sowie Instanz- und Klassenattribute und -methoden. Außerdem geht es um die vollständige Schreibweise von Attributen und Methoden und darum, wie Du aus einem Anforderungstext ein Klassendiagramm entwickelst.
Mithilfe des Tools PlantUML lassen sich textbasiert UML-Zustandsdiagramme erstellen. Der Artikel zeigt die Syntax für Zustände, Transitionen, innere Aktionen, Choices und Junctions, zusammengesetzte Zustände, Regionen und Historie sowie Möglichkeiten, die Diagramme zu teilen und einheitlich zu formatieren.
Mit UML-Zustandsdiagrammen lassen sich alle Systeme modellieren, die unter variierenden Randbedingungen unterschiedliches Verhalten anbieten oder ausführen. Das trifft auf User-Interfaces ebenso zu wie auf Embedded Systems: allen ist gemein, dass unterschiedliche Zustände jeweils besonderes Verhalten haben – und es definierte Zustandsübergänge mit Auslösern, Bedingungen und Übergangsverhalten gibt. Neben der Notation geht es darum, wie Du aus einer Beschreibung Schritt für Schritt ein Diagramm entwickelst, typische Fehler vermeidest und das Diagramm in Code und Testfälle überträgst.
Wie erstelle ich leaf nodes und branch nodes mit JavaFX? Welche habe ich zur Auswahl? Und wie versehe ich Widgets – wie zum Beispiel Buttons mit Events?
Was passiert unter der Oberfläche in JavaFX? Was ist eine Scene, ein Root Node, ein branch node und ein Leaf node? Der Artikel ist Teil eines JavaFX-Tutorials.
„Hello World“ mit Java FX und Analyse der beteiligten Klassen, Objekte und Methoden. Artikel ist Teil eines JavaFX-Tutorials.
Erstellung eines JavaFX-Projekts, Aufbau der Maven-Konfiguration pom.xml und Starten des Programms (auch mit Maven). Artikel ist Teil eines JavaFX-Tutorials.
Voraussetzungen für ein Java-Programm schaffen: Java, IDE und Plugins installieren
Wieviel Energie benötigen wir bei 130 km/h mehr als bei 100 km/h? Um wie viel sparsamer ist ein Kleinwagen als ein Van? Python-Fingerübung für Einsteiger mit Kontrollstrukturen, Wiederholungsstrukturen, einfacher Ein- und Ausgabe.
Es ist nur noch eine Gesamtübersicht einer Datenbank in einer Tabelle vorhanden. Aus diesen Daten soll die ursprüngliche DB wiederhergestellt werden. Diese soll modelliert, importiert und im Bestand normalisiert werden. (DB Entwurf, Normalisierung, SQL-DDL, SQL-DML, Container, DBMS-Frontends und -Backends).
Die meisten aktuellen Frameworks wären undenkbar ohne die „Zauberhand“, die im Hintergrund lose gekoppelte Komponenten verknüpft. Der Artikel führt vom Entwurfsprinzip Dependency Inversion über die Umsetzung Inversion of Control zum Entwurfsmuster Dependency Injection – mit Codebeispielen in Java, C# und Python und UML-Klassendiagrammen.
Java Annotationen – Welche geläufigen gibt es? Wozu werden sie genutzt? Wer kann sie auslesen? Welche Eigenschaften können sie haben? Wie kann ich eigene Erstellen? Was wirt mit _Retention_ und _Target_ festgelegt? Was ist die Reflection API und was hat sie mit Annotations zu tun?