Testing: Unit, Integration, Contract & E2E

Tests müssen zur Architektur passen: schnell in der Mitte, realistisch an den Rändern, wenige aber wertvolle E2E-Flows.

JUnitArchUnitTestcontainersContract Tests
Testing Strategie für Enterprise Java
Testing Strategie für Enterprise Java

Strategie

Die Testpyramide wird im Enterprise-Kontext oft falsch verstanden. Viele langsame E2E-Tests ersetzen keine guten Domain- und Use-Case-Tests.

Unit

Domain Unit Test
@Test
void orderWithoutLinesIsRejected() {
    assertThrows(DomainRuleViolation.class,
        () -> Order.place(new CustomerId("C-1"), List.of()));
}

Integration

Integrationstests prüfen Adapter gegen echte Infrastruktur: PostgreSQL, Kafka, JMS-kompatible Broker, HTTP WireMock oder Testcontainers.

Contract

Contract Tests verhindern, dass Producer und Consumer beim API-/Event-Vertrag auseinanderlaufen.

E2E

E2E ist teuer und fragil. Deshalb nur wenige kritische Happy Paths und ausgewählte Fehlerpfade.

Architekturtests

ArchUnit-Regel für saubere Domain
@AnalyzeClasses(packages = "com.aydinsude.enterprise")
class ArchitectureRulesTest {
    @ArchTest
    static final ArchRule domain_has_no_framework_dependency =
        noClasses().that().resideInAPackage("..domain..").should()
            .dependOnClassesThat().resideInAnyPackage("org.springframework..", "jakarta..", "org.hibernate..");
}
⌂ Cockpit