V monolitu je testování relativně přímočaré — jeden deployment, jedna databáze. V mikroslužbách testujete distribuovaný systém. Jak zajistit, že služby spolu fungují, bez toho abyste všechno spouštěli najednou?
Testing Pyramid¶
Unit testy (základ): Business logika, doménové objekty. Rychlé, izolované. Integration testy (střed): Služba + databáze, služba + message broker. Contract testy: Ověření, že API kontrakt mezi službami platí. End-to-end (špička): Celý systém. Pomalé, křehké — minimum.
Consumer-Driven Contract Testing¶
Služba A (consumer) definuje, co očekává od služby B (provider). Kontrakt se ověřuje na obou stranách nezávisle. Pact framework:
// Consumer test (service A)
@Pact(consumer = "OrderService", provider = "UserService")
public RequestResponsePact userDetailsPact(PactDslWithProvider builder) {
return builder
.given("user 123 exists")
.uponReceiving("get user details")
.path("/api/users/123")
.method("GET")
.willRespondWith()
.status(200)
.body(new PactDslJsonBody()
.integerType("id", 123)
.stringType("name", "Jan Novák"))
.toPact();
}
Integration testy s Testcontainers¶
Testcontainers spouští Docker kontejnery v testech — reálný PostgreSQL, Redis, RabbitMQ. Žádné mocky databáze, žádné in-memory náhrady. Pomalší, ale ověřujete reálné chování.
E2E: minimálně, ale mít¶
Happy path scénáře — uživatel se přihlásí, vytvoří objednávku, zaplatí. Smoke testy po deployi. Nepokrývat edge cases E2E testy — to je úkol pro unit a contract testy.
Test pyramid, ne test ice cream¶
Hodně unit testů, méně integration, minimum E2E. Contract testy jsou klíčová inovace pro mikroslužby — ověřují kompatibilitu bez spouštění celého systému.