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
In dieser Datei
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..");
}