Testing, Qualität & Architektur-Checks
Unit, Integration, Contract, Mutation, Architecture Tests und Testdatenstrategie.
Enterprise JavaBeispieleArchitekturOffline HTML
In dieser Datei
Testpyramide für Enterprise Java
Enterprise-Tests sollen schnelles Feedback und reale Sicherheit kombinieren. Unit-Tests prüfen Domain-Regeln. Integrationstests prüfen DB, Broker und Framework-Konfiguration. Contract-Tests schützen Schnittstellen. End-to-End-Tests prüfen wenige kritische Gesamtabläufe.
| Testart | Ziel | Beispiel |
|---|---|---|
| Unit Test | Fachregel isoliert prüfen | Order darf ohne Lines nicht platziert werden |
| Integration Test | Adapter mit echter Infrastruktur prüfen | Repository gegen PostgreSQL |
| Contract Test | API-Vertrag stabil halten | Consumer erwartet Feld totalAmount |
| Architecture Test | Abhängigkeitsrichtung erzwingen | Domain darf Spring nicht importieren |
| E2E Test | kritischen Geschäftsfluss prüfen | Order -> Invoice -> Payment |
Integrationstest mit Testcontainers
@Testcontainers
class OrderRepositoryIT {
@Container
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16-alpine");
@Test
void persistsOrderWithLines() {
OrderRepository repository = repositoryFor(postgres.getJdbcUrl());
Order order = Order.draftFor(new CustomerId(UUID.randomUUID()));
order.addLine("SKU-1", 2, new BigDecimal("19.90"));
order.place();
repository.save(order);
assertThat(repository.findById(order.id())).isPresent();
}
}
Architekturtests
ArchUnit-Regeln für Moduldisziplin
@AnalyzeClasses(packages = "com.example.order")
class ArchitectureRulesTest {
@ArchTest
static final ArchRule domain_is_framework_free = noClasses()
.that().resideInAPackage("..domain..")
.should().dependOnClassesThat().resideInAnyPackage(
"org.springframework..", "jakarta.persistence..", "jakarta.ws.rs.."
);
@ArchTest
static final ArchRule adapters_do_not_call_each_other = noClasses()
.that().resideInAPackage("..adapter..")
.should().dependOnClassesThat().resideInAPackage("..adapter..");
}