Migration Deep Dive für 19 · JUnit und Testdesign öffnen →
⌂ ÜbersichtAlle Vergleiche
Modul 19 · 100 % Codeabdeckung

JUnit und Testdesign

Vollständiger Legacy-Modern-Vergleich aller Java-Klassen, Tests, Maven-POMs und relevanten Ressourcen dieses Moduls. Jede Datei ist genau einmal einer fachlich passenden Vergleichsgruppe zugeordnet.

3Legacy-Dateien
3Modern-Dateien
50 → 59Codezeilen
7/7vollständig erfasst

Fachliche Einordnung

Legacy

JUnit 4 Einzeltest

Ein einzelner @Test deckt genau einen Beispieldatensatz ab.

Modern

JUnit 5 Parameterized Test

Ein @ParameterizedTest führt dieselbe Aussage mit mehreren repräsentativen Datensätzen aus.

Vergleichsfokus: Alle Dateien werden nach technischer Rolle und fachlicher Verantwortung gruppiert.
Wichtige Abgrenzung: One-to-many-Änderungen werden als Gruppe dargestellt; eine künstliche 1:1-Zuordnung wird vermieden.

Vollständige Abdeckungsmatrix

Die Ähnlichkeit ist eine technische Orientierung auf normalisiertem Quelltext. Sie ersetzt keine fachliche Bewertung.

VergleichsgruppeLegacy-DateienModern-DateienLegacy-ZeilenModern-ZeilenÄhnlichkeit
Build-Konfiguration11303456%
Produktionscode1199100%
Testcode11111639%

Gemeinsame Modulstruktur

Das Pair-POM bindet die Legacy- und Modern-Submodule zusammen und gehört deshalb ebenfalls zur vollständigen Codeabdeckung.

Gemeinsam · 19 Zeilenpom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>at.aydin.academy</groupId>
        <artifactId>java-modernization-deep-dive</artifactId>
        <version>1.0.0</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>
    <artifactId>19junittesting-pair</artifactId>
    <packaging>pom</packaging>
    <name>JUnit und Testdesign: Legacy und Modern</name>
    <modules>
        <module>legacy</module>
        <module>modern</module>
    </modules>
</project>

Alle semantischen Codevergleiche

01Build-KonfigurationDirektvergleich · Legacy 30 / Modern 34 Zeilen · Ähnlichkeit 56%

JUnit-4- und JUnit-5-Konfiguration wird verglichen.

Legacy-DateienModern-DateienEinordnung
pom.xmlpom.xmlDirektvergleich
Semantische Ähnlichkeit: 56%

Legacy

Legacy · 30 Zeilenlegacy/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
            <parent>
                <groupId>at.aydin.academy</groupId>
                <artifactId>19junittesting-pair</artifactId>
                <version>1.0.0</version>
                <relativePath>../pom.xml</relativePath>
            </parent>
            <artifactId>junit4-legacy</artifactId>
            <packaging>jar</packaging>
            <name>JUnit 4 Legacy</name>

            <dependencies>

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>

            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                    </plugin>

                </plugins>
            </build>
        </project>

Modern

Modern · 34 Zeilenmodern/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
            <parent>
                <groupId>at.aydin.academy</groupId>
                <artifactId>19junittesting-pair</artifactId>
                <version>1.0.0</version>
                <relativePath>../pom.xml</relativePath>
            </parent>
            <artifactId>junit5-modern</artifactId>
            <packaging>jar</packaging>
            <name>JUnit 5 Modern</name>

            <dependencies>

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <scope>test</scope>
</dependency>
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><scope>test</scope></dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                    </plugin>

                </plugins>
            </build>
        </project>
02ProduktionscodeDirektvergleich · Legacy 9 / Modern 9 Zeilen · Ähnlichkeit 100%

Der Fachcode bleibt bewusst gleich, um Testdesign isoliert zu vergleichen.

Legacy-DateienModern-DateienEinordnung
VatCalculator.javaVatCalculator.javaDirektvergleich
Semantische Ähnlichkeit: 100%

Legacy

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

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;
    }
}
03TestcodeDirektvergleich · Legacy 11 / Modern 16 Zeilen · Ähnlichkeit 39%

Assertions, Lifecycle und Parametrisierung werden direkt gegenübergestellt.

Legacy-DateienModern-DateienEinordnung
VatCalculatorTest.javaVatCalculatorTest.javaDirektvergleich
Semantische Ähnlichkeit: 39%

Legacy

package at.aydin.lab.testing.legacy;

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class VatCalculatorTest {
    @Test
    public void calculatesTwentyPercent() {
        assertEquals(120.0, new VatCalculator().gross(100, 0.2), 0.001);
    }
}

Modern

package at.aydin.lab.testing.modern;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.assertEquals;

// Design Pattern: Parameterized Test
// Zweck: Ein fachliches Verhalten wird mit mehreren repräsentativen Datenkombinationen geprüft.
class VatCalculatorTest {
    @ParameterizedTest
    @CsvSource({
        "100,0.2,120", "50,0.1,55", "0,0.2,0"
    }) void calculates(double net, double rate, double expected) {
        assertEquals(expected, new VatCalculator().gross(net, rate));
    }
}
⌂ Cockpit