GH GambleHub

Unit vs İnteqrasiya testləri

1) Niyə test növlərini fərqləndirmək lazımdır

Testlərin düzgün qranulyasiyası inkişafın proqnozlaşdırıla biləcəyini göstərir: Vahid məntiq qüsurlarını tez və ucuz tutur; Integration modulları, real nəqliyyat və «yapışqan» bağlarını yoxlayır. Birlikdə reqressiyanı azaldır və buraxılışları sürətləndirir.

2) Təriflər və sərhədlər

Unit test

Təcriddə kiçik davranış vahidini (funksiya, sinif, use-case) yoxlayır.
Xarici asılılıqlar dəyişdirilir (mock/stub/fake).
Sürətli (ms-onlarca ms), determinik.

İnteqrasiya testi

Bir neçə real komponentin qarşılıqlı təsirini yoxlayır: DB, broker (Kafka/RabbitMQ), HTTP/gRPC, fayl sistemi, cache.
Minimum mokov, real protokollar.
Daha yavaş (yüzlərlə ms-saniyə), dəstək baxımından daha bahalı.

💡 Qayda: «prosesi/soket/DB» keçdikdən sonra artıq inteqrasiya sularındayıq.

3) Test piramidası (buz buynuzu deyil)

Əsas: Unit (miqdarı 70-80%) - ucuz, tez.
Orta təbəqə: Integration/Component (15-25%) - kritik yollar və müqavilələr.
Üst: E2E/UX/Exploratory (5-10%) - minimum kifayətdir.
Yan tərəflərdə: Static Analysis/Lint/Type check və keyfiyyət gücləndiriciləri kimi Mutation testing.

4) Unit nə vermək və nə - Integration

TapşırıqTipNiyə
Xalis biznes məntiqi (validasiya, komissiya hesablamaları, açarların idempotentliyi)UnitTez, müəyyən edilmiş, bir çox sərhəd dəyərləri
DTO mappinqləri, serial, parsinqUnitBir çox hallarda, asanlıqla izolyasiya
Anbarlar/ORM sorğularıIntegration (с test DB)«Davranış» ORM və SQL nüansları yalnız canlı DB görünür
HTTP müqaviləsi (statuslar, başlıqlar, sxemlər)Integration / ContractHTTP + JSON Schema/OpenAPI canlı yığını lazımdır
Saga/Outbox, retray, son tarixIntegration / ComponentTayminqlər, əməliyyat qabiliyyəti, broker
Rate limit в gatewayIntegrationRedis/State/Taymaut
Ödəniş vebhukları (HMAC, təkrar)Integration / CDCİmza, saat, şəbəkə xüsusiyyətləri

5) Məlumatlar və fiksturlar

Unit

Inline fiksturlar/bilderlər (fabriki methods).
Sərhəd dəyərləri üçün cədvəl testləri (table-driven).
İnvariantlar üçün property-based yanaşma (məsələn, «debet məbləği = kredit məbləği»).

Integration

Hermetic mühit: Testcontainers/Docker Compose qaldırmaq 'postgres + redis + kafka + wiremock'.
BD/cache-də ilkin seed və sonra təmizləmə (əməliyyat/rollback, truncate).
Saat/zamanlayıcılar - saxta (nəzarət olunan), əks halda flaklar.

6) Alətlər və nümunələr

Mocks/Stubs/Fakes/Spies:
  • Stub - sabit cavab (ucuz).
  • Mock - qarşılıqlı əlaqələrin/zənglərin sayının yoxlanılması.
  • Fake - sadələşdirilmiş tətbiq (məsələn, In-Memory Repo).
  • Contract testing (CDC): Pact/Swagger-based - müştərinin gözləntilərini qeyd edirik və provayderi yoxlayırıq.
  • WireMock/MockServer - üçüncü tərəf xidmətləri üçün HTTP qapaqları.
  • Testcontainers - yerli və «zoopark» olmadan CI canlı DB/broker.

7) Nümunələr

7. 1 Unit: ödəmə idempotluğu (pseudocode)

python def test_idempotent_create_payment_returns_same_id():
repo = InMemoryPayments()
service = Payments(repo)

first = service. create(amount=100, key="abc")
second = service. create(amount=100, key="abc")

assert first. id == second. id assert repo. count() == 1

7. 2 Integration: vebhuk imzası (HMAC) + təkrar

bash docker-compose: app + redis + wiremock (PSP)
docker compose -f docker-compose. test. yml up -d pytest -m "integration and webhook" -q
Test:
  • WireMock 'X-Timestamp' və imza ilə bir hadisə verir.
  • Tətbiq HMAC-ı yoxlayır, 'event _ id' deduplikasiya edir, 5 saniyədən sonra təkrarlama dubl yaratmır.
  • Biz '200' və qeyd bir olduğunu yoxlayın.

7. 3 CDC: müştərinin provayderə müqaviləsi

Müştəri Pact yaradır (gözləmə: 'POST/v1/payout' → '201' sxemlə).
CI-də provayder öz stendində müqavilənin təsdiqini qaçırır.

8) Sürət, Paralellik, Flakes

Unit <100 ms bir test işləməlidir; paketi - saniyələr.
Integration - konteynerlərdə/limanlarda paralel; başlanğıcda miqrasiyadan istifadə edin.

Flaky-antidot:
  • nəzarət olunan vaxt (fake clock),
  • «açıq hadisə» deyil, «sleep» gözləntiləri,
  • sabit astanalar (determinized test jitter ilə retras).

9) Keyfiyyət metrikası

Coverage (sətirlər/qollar): trend müşahidə üçün faydalıdır, lakin hədəf deyil.
Mutation testing (PIT/Mutmut): saxta dəyişikliklər test «öldürür» göstərir - assurens real gücü.
Test duration və flaky rate: böyümə zamanı alert.
Defect containment: istehsaldan əvvəl ələ keçirilən baqların payı.

10) CI/CD daxil

Cobs: unit → integration → e2e (xidmətlər üzrə fan-out).
Asılılıq cache, DB/dillər/versiyalar üzrə paralel matrislər.
Hesabatlar: JUnit/Allure + konteyner log artefaktları (düşdükdə).
Gate: «yaşıl unit + kritik integration» - merj şərti; e2e - nightly.

Matris nümunəsi (GitHub Actions, fraqment):
yaml strategy:
matrix:
db: [postgres14, postgres16]
steps:
- run: docker run -d --name db -e POSTGRES_PASSWORD=pw postgres:${{ matrix. db }}
- run: pytest -m "unit" -q
- run: pytest -m "integration" -q

11) Mikroservislər və hadisələr

Xidmət müqavilələri: OpenAPI/Protobuf versiyası; uyğunluq testləri (backward).

Event-driven:
  • Unit: Domain hadisələri və invariantları mapping.
  • Integration: real broker nəşr/abunə (Kafka), outbox/inbox semantika, exactly-once imitasiya (ən azı - idempotent).
  • Retraj/dublikat/yenidən nizamlama testləri (out-of-order).

12) Integration məlumat və izolyasiya

Hər test → unikal sxem/DD (Testcontainers JDBC URL '? TC _ TMPFS =/var/lib/postgresql/data: rw').
Əməliyyat fiksturları (begin → run → rollback) təmizləməni sürətləndirir.
Redis/cache üçün - əsas prefiks 'test: $ {RUN _ ID}:' və 'FLUSHDB' teardown.

13) iGaming/Maliyyə Xüsusiyyətləri

Pul və limitlər: invariantlar üçün property-based testlər (balans ≥ 0, ümumi məhdudiyyətlər).
Tənzimləyici: jurnalın yoxlanılması (audit-log yazılır), dəyişməz hadisələr.
Ödənişlər/PSP: HMAC/mTLS inteqrasiya testləri, 'Retry-After', idempotentlik, dedup 'jti'.
Məsuliyyətli oyun: eşik/kuldaun qaydaları testləri; fake clock-da «dünən → bu gün».

14) Antipattern

DB/NTTR qaldıran «Unit» artıq inteqrationdur (qatları qarışdırır və CI-ni yavaşlatır).
Boş iddialarla yüksək coverage («örtülmüş, lakin yoxlanılmamışdır»).
Müqavilənin lazım olduğu yerlərdə üçüncü tərəf xidmətlərinin məntiqi (yeniləmə zamanı pozulur).
'sleep (5)' ilə testlər hadisə/şərtləri gözləmək əvəzinə.
Paralel testlər üçün ümumi test DD → yarış və fleyka.

15) Prod hazırlıq yoxlama siyahısı

  • Piramida müəyyən edilmişdir: Unit/Integration/E2E paylarının% -i və qaçış vaxtı ilə hədəf.
  • Unit təcrid, sürətli, sərhəd dəyərləri və invariantları əhatə edir.
  • Integration ümumi states olmadan hermetic-mühit (Testcontainers/Compose) istifadə edir.
  • Müqavilə testləri (OpenAPI/Pact) CI-də təsdiqlənir.
  • Test məlumatları - idarə olunur: seed/rollback/prefiks, fake clock.
  • Paralel qaçış, JUnit/Allure hesabatları, konteyner log artefaktları.
  • Metriklər: duration, flaky rate, mutation score; deqradasiya üçün alertlər.
  • Ödəniş/vebhuk ssenariləri: HMAC/mTLS, retray, idempotentlik, dedup.
  • Strategiya sənədləşdirilməsi və test şablonları nümunələri.

16) TL; DR

Unit - maksimum məntiq, minimum mühit; İnteqrasiya - minimum mok, maksimum realizm. Piramidanı saxlayın: Sürətli Unit 80% qüsurları tutur, Integration bağları və müqavilələri təsdiqləyir. hermetic konteynerləri, müqavilə testləri, fake clock və paralellik istifadə edin. Yalnız coverage deyil, həm də mutation score və flaky rate ölçün. Xüsusilə ödəmə/vebhuk yollarını yoxlayın: imzalar, retrajlar və idempotentlik.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.