Modul 19 · Migration Deep Dive · Stufe 1 Fundament

JUnit und Testdesign

JUnit 4 und einzelne Beispielwerte wird nachvollziehbar in JUnit 5 Parameterized Tests überführt. Die Akte zeigt nicht nur das Ziel, sondern die tatsächlichen Dateien, APIs, Dependencies, Codebelege, Tests, Risiken und Cutover-Schritte.

Test Data BuilderParameterized Test
1 → 1Produktionsdateien
9 → 9Java-Zeilen
1 → 1Testdateien
1 / 2Dependencies entfernt / neu
NIEDRIGRisiko · Score 0

Was sich konkret ändert

DimensionLegacyModernMigrationskonsequenz
Programmiermodellimperativ / ohne Framework-Annotationenexplizite Java-AbstraktionenAnnotationen und Containerfunktionen werden nur dort eingesetzt, wo sie eine konkrete technische Verantwortung übernehmen.
Abhängigkeiten1 direkte Dependencies2 direkte Dependencies2 neu, 1 entfernt; Versionen und transitive Auswirkungen im erfolgreichen Online-Build prüfen.
Öffentliche API1 erkannte Methoden1 erkannte MethodenMethoden werden nach fachlicher Rolle gemappt; reine Bootstrap- und Framework-Methoden sind kein fachlicher Vertrag.
Datenmodellclass VatCalculatorclass VatCalculatorFeldnamen, IDs, Null-Semantik, Gleichheit und Serialisierungsform werden separat regressionstestet.
FehlerverhaltenLegacy-Exceptions und Rückgabewerteexplizitere Fach-/Framework-FehlerabbildungFehler dürfen nicht nur technisch übersetzt werden; Status, Ursache, Retrybarkeit und Client-Vertrag müssen erhalten oder versioniert werden.
TestsBestands- und Golden-Master-TestsUnit-, Slice-, Contract- und IntegrationstestsDer Modern-Pfad wird zuerst gegen denselben fachlichen Vektor geprüft und danach um neue technische Risiken ergänzt.
BetriebLegacy-Start/Lifecyclemodernes Packaging, Health und externe KonfigurationCI-Mischbetrieb nur zeitlich begrenzt; keine still deaktivierten Tests.
RollbackLegacy-Artefakt bleibt unverändertModern-Artefakt getrennt deploybarKein Rollback über Datenverlust: Schema, Nachrichten und verschlüsselte Daten müssen rückwärtslesbar oder durch Dual-Read abgesichert sein.

Fachlicher Vertrag: unverändert zu erhalten

  • Tests prüfen Fachverhalten und nicht Implementierungsdetails.
  • Lifecycle und Testdatenisolation bleiben korrekt.
  • Fehlermeldungen sind aussagekräftig.

Hauptrisiko und Testfokus

test lifecycle and assertion migration

parameter boundaries, lifecycle and failure-message tests

Die Modernisierung gilt erst als abgeschlossen, wenn der fachliche Vertrag automatisiert belegt ist.

Verbindliches Code- und Rollenmapping

Die Zuordnung ist semantisch: Eine Legacy-Klasse kann in mehrere moderne Rollen zerlegt werden.

Legacy-Rolle / DateiModern-Rolle / DateiBedeutung
VatCalculator.javaVatCalculator.javaProduktionscode bleibt; Testdesign wechselt von JUnit 4 zu Jupiter/Parameterized Tests.

Legacy-Quellinventar

DateiTypAnnotationenöffentliche APIPatternZeilen
VatCalculator.javaclass VatCalculatordouble gross(double net, double rate)Stateless Service – hält die Berechnung zustandsfrei und isoliert testbar.9

Modern-Quellinventar

DateiTypAnnotationenöffentliche APIPatternZeilen
VatCalculator.javaclass VatCalculatordouble gross(double net, double rate)Stateless Service – hält die Berechnung zustandsfrei und isoliert testbar.9

Dependency- und Laufzeitmigration

StatusDependencyVersionScopePrüfung
ENTFERNTjunit:junit4.13.2testLegacy-Laufzeit entfällt oder wird durch Plattform/BOM ersetzt.
NEUorg.junit.jupiter:junit-jupiterBOM/ParenttestNeue Laufzeit-/Testabhängigkeit; transitiv, lizenz- und security-seitig prüfen.
NEUorg.junit.jupiter:junit-jupiter-paramsBOM/ParenttestNeue Laufzeit-/Testabhängigkeit; transitiv, lizenz- und security-seitig prüfen.
Direkte POM-Daten ersetzen keinen erfolgreichen Online-Build mit transitiver SBOM- und CVE-Prüfung.

Vorher-/Nachher-Codebelege

Die folgenden Ausschnitte stammen direkt aus den enthaltenen Projekten. Dadurch ist sichtbar, welche Verantwortung tatsächlich verschoben wurde.

Legacy
VatCalculator.java
Modern
VatCalculator.java

Migrationsbedeutung: Produktionscode bleibt; Testdesign wechselt von JUnit 4 zu Jupiter/Parameterized Tests.

Legacy-Code

projects/19-junit-testing/legacy/src/main/java/at/aydin/lab/testing/legacy/VatCalculator.java

package at.aydin.lab.testing.legacy;

// Design Pattern: Stateless Service – hält die Berechnung zustandsfrei und isoliert testbar.
public final class VatCalculator {
    public double gross(double net, double rate) {
        if (net < 0 || rate < 0) throw new IllegalArgumentException();
        return Math.round(net * (1 + rate) * 100.0) / 100.0;
    }
}

Modern-Code

projects/19-junit-testing/modern/src/main/java/at/aydin/lab/testing/modern/VatCalculator.java

package at.aydin.lab.testing.modern;

// Design Pattern: Stateless Service – hält die Berechnung zustandsfrei und isoliert testbar.
public final class VatCalculator {
    public double gross(double net, double rate) {
        if (net < 0 || rate < 0) throw new IllegalArgumentException();
        return Math.round(net * (1 + rate) * 100.0) / 100.0;
    }
}
Technischen Unified Diff öffnen
--- VatCalculator.java
+++ VatCalculator.java
@@ -1,4 +1,4 @@
-package at.aydin.lab.testing.legacy;
+package at.aydin.lab.testing.modern;
 
 // Design Pattern: Stateless Service – hält die Berechnung zustandsfrei und isoliert testbar.
 public final class VatCalculator {

Umsetzungsplan mit Qualitäts-Gates

  1. Arbeitspaket 1
    JUnit-4-Runner, Rules und erwartete Exceptions inventarisieren. Nachweis: Commit/PR, automatisierter Test und aktualisierte Betriebsdokumentation.
  2. Arbeitspaket 2
    Dependencies und Imports auf Jupiter umstellen. Nachweis: Commit/PR, automatisierter Test und aktualisierte Betriebsdokumentation.
  3. Arbeitspaket 3
    Setup/Teardown auf BeforeEach/AfterEach oder Extensions migrieren. Nachweis: Commit/PR, automatisierter Test und aktualisierte Betriebsdokumentation.
  4. Arbeitspaket 4
    Wiederholte Fälle in Parameterized Tests überführen. Nachweis: Commit/PR, automatisierter Test und aktualisierte Betriebsdokumentation.
  5. Arbeitspaket 5
    Assertions semantisch überprüfen, nicht nur syntaktisch ersetzen. Nachweis: Commit/PR, automatisierter Test und aktualisierte Betriebsdokumentation.
  6. Arbeitspaket 6
    JUnit Vintage erst nach vollständiger Jupiter-Abdeckung entfernen. Nachweis: Commit/PR, automatisierter Test und aktualisierte Betriebsdokumentation.

Konkreter Test- und Abnahmekatalog

IDEbenePrüfungerforderlicher Nachweis
19-JUNIT-TESTING-A01Integration/ContractAlle bisherigen Tests laufen unter Jupiter.Automatisierter Test und CI-Protokoll
19-JUNIT-TESTING-A02Integration/ContractKeine versehentlich deaktivierten Tests.Automatisierter Test und CI-Protokoll
19-JUNIT-TESTING-A03Integration/ContractParameterized Tests decken Grenzwerte ab.Automatisierter Test und CI-Protokoll
19-JUNIT-TESTING-A04Integration/ContractTests sind unabhängig von Ausführungsreihenfolge.Automatisierter Test und CI-Protokoll
19-JUNIT-TESTING-A05Integration/ContractBuild enthält keine JUnit-4-Runtime mehr, sofern nicht bewusst benötigt.Automatisierter Test und CI-Protokoll
19-JUNIT-TESTING-T01UnitFachlogik ohne Container oder externen Dienst testen.Unit-Test
19-JUNIT-TESTING-T02RegressionLegacy- und Modern-Ergebnis für denselben Golden-Master-Vektor vergleichen.Vergleichsreport
19-JUNIT-TESTING-T03NegativeFehlerhafte, leere und grenzwertige Eingaben prüfen.Negativtest
19-JUNIT-TESTING-T04OperationsStart, Health, Shutdown und Konfigurationsfehler prüfen.Deployment-/Startprotokoll
19-JUNIT-TESTING-F01Fokusparameter boundaries, lifecycle and failure-message testsModulspezifischer Testreport

Risikoregister des Moduls

RisikoAuswirkungGegenmaßnahmeGate
test lifecycle and assertion migrationNIEDRIGparameter boundaries, lifecycle and failure-message testsvor Cutover
Neue Framework-/Library-LaufzeitabhängigkeitenMITTELSBOM, Lizenz-, CVE- und transitive Dependency-Prüfung im Online-Buildvor Release
Legacy-Verhalten war implizit an entfernte Library gekoppeltMITTELContract-/Golden-Master-Tests und gezielte Fehlerpfadevor Abschaltung

Konfiguration und Ressourcen

Keine zusätzlichen Ressourcen.

Rollback und Koexistenz

JUnit Vintage erlaubt zeitlich begrenzten Mischbetrieb; neue Tests werden ausschließlich mit Jupiter geschrieben.

Abbruchkriterien

  • Fachlicher Golden-Master weicht ab.
  • Daten-, Nachrichten- oder API-Kompatibilität ist ungeklärt.
  • Fehlerquote, Latenz oder Ressourcenverbrauch überschreiten das vereinbarte Limit.
  • Monitoring oder Rückfallpfad ist nicht funktionsfähig.

Definition of Done

Direkte Arbeitslinks

⌂ Cockpit