GH GambleHub

Unit vs Integration synaglary

1) Näme üçin synaglaryň görnüşlerini tapawutlandyrmaly?

Synaglaryň dogry granulasiýasy ösüşi öňünden aýdyp bolýar: Unit logikanyň kemçiliklerini çalt we arzan tutýar; Integration modullaryň baglanyşyklaryny, hakyky ulaglary we "ýelimi" barlaýar. Olar bilelikde regressiýany azaldýarlar we çykarylyşyny çaltlaşdyrýarlar.

2) Kesgitlemeler we serhetler

Unit-test

Izolýasiýada özüňi alyp barşyň kiçi birligini (funksiýa, synp, use-case) barlaýar.
Daşarky baglanyşyklar çalşyldy (mock/stub/fake).
Çalt (ms-onlarça ms), kesgitlenen.

Integration-test

Birnäçe hakyky komponentleriň özara täsirini barlaýar: DB, broker (Kafka/RabbitMQ), HTTP/gRPC, faýl ulgamy, nagt pul.
Iň az mokow, hakyky teswirnamalar.
Has haýal (ýüzlerçe ms-sekunt), goldaw taýdan has gymmat.

💡 Düzgün: "prosesi/soket/DB geçenimizden soň" - biz eýýäm integrasiýa suwlarynda.

3) Synag piramidasy (buz şahy däl)

Esasy: Unit (sany boýunça 70-80%) - arzan, çalt.
Orta gatlak: Integration/Component (15-25%) - möhüm ýollar we şertnamalar.
Ýokarky: E2E/UX/Exploratory (5-10%) - iň az ýeterlikdir.
Gapdalynda: Static Analysis/Lint/Type check we Mutation testing hil güýçlendiriji hökmünde.

4) Näme bermeli Unit, näme bermeli - Integration

MaksatGörnüşiNäme üçin
Arassa işewürlik logikasy (tassyklamalar, komissiýalaryň hasaplamalary, açarlaryň deňligi)UnitÇalt, kesgitlenen, köp çäkli gymmatlyklar
DTO mappingleri, serial, parsingUnitKöp iş, izolýasiýa etmek aňsat
Ammar/ORM soraglaryIntegration (с test DB)ORM we SQL-iň "özüni alyp barşy" nuanslary diňe janly DB-de görünýär
HTTP-şertnama (statuslar, sözbaşylar, shemalar)Integration / ContractHTTP + JSON Shema/OpenAPI yığını gerek
Saga/Outbox, retralar, möhletlerIntegration / ComponentTaýmingler, amallar, broker
Rate limit в gatewayIntegrationRedis/state/wagt
Töleg webhuklary (HMAC, gaýtalamak)Integration / CDCGollar, sagatlar, tor aýratynlyklary

5) Maglumatlar we fikstura

Unit

Inline fiksturlary/bilderleri (factory methods).
Çäkli gymmatlyklar üçin tablisa synaglary (table-driven).
Üýtgewsizler üçin property-based çemeleşmesi (mysal üçin, "debetleriň jemi = karzlaryň mukdary").

Integration

Hermetik gurşaw: Testcontainers/Docker Compose göterýär 'postgres + redis + kafka + wiremock'.
BD/kesşde başlangyç seed we soň arassalamak (geleşik/rollback, truncate).
Sagatlar/taýmerler - galp (gözegçilik edilýän), ýogsam flaklar.

6) Gurallar we nagyşlar

Mocks/Stubs/Fakes/Spies:
  • Stub - kesgitlenen jogap (arzan).
  • Mock - özara täsirleri/jaňlaryň sanyny barlamak.
  • Fake - ýönekeýleşdirilen amal (mysal üçin, In-Memory Repo).
  • Contract testing (CDC): Pact/Swagger-based - müşderiniň garaşyşlaryny ýazga alýarys we üpjün edijini barlaýarys.
  • WireMock/MockServer - üçünji tarap hyzmatlary üçin HTTP bloklary.
  • Testcontainers - ýerli we SI-de "haýwanat bagy" bolmadyk janly DB/brokerler.

7) Mysallar

7. 1 Unit: Töleg deňligi (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: webhuk goly (HMAC) + gaýtalamak

bash docker-compose: app + redis + wiremock (PSP)
docker compose -f docker-compose. test. yml up -d pytest -m "integration and webhook" -q
Synag:
  • WireMock 'X-Timestamp' wakasyny we goluny berýär.
  • Programma HMAC-ny barlaýar, 'event _ id' -ni kesgitleýär, 5 sekuntdan soň gaýtalamak goşa döretmeýär.
  • '200' -ni barlaýarys.

7. 3 CDC: müşderiniň üpjün edijä şertnamasy

Müşderi Pact emele getirýär (garaşmak: 'POST/v1/payout' → '201' shema bilen).
CI-de üpjün ediji öz stendinde şertnamanyň tassyklanylmagyny geçirýär.

8) Tizlik, meňzeşlik, fleýka

Unit synag üçin <100 ms işlemeli; paket - sekunt.
Integration - konteýnerler/portlar boýunça meňzeşlik; Uçuşda göçmegi ulanmak.

Flaky-antidot:
  • gözegçilik edilýän wagt (fake clock),
  • "sleep" däl-de, "aç-açan waka" garaşmak,
  • durnukly bosagalar (jitter bilen retralary determinirlenen görnüşde barlamak).

9) Hil ölçegleri

Coverage (setirler/şahalar): tendensiýany synlamak üçin peýdaly, ýöne maksat däl.
Mutation testing (PIT/Mutmut): synaglaryň ýalan üýtgeşmeleri öldürýändigini ýa-da ýokdugyny görkezýär - assurensiň hakyky güýji.
Test duration we flaky rate: ulalanda alertler.
Defect containment: önümçilikden öň saklanan buglaryň paýy.

10) CI/CD-e goşmak

Joblar: unit → integration → e2e (hyzmatlar boýunça fan-out).
DB/diller/wersiýalar boýunça garaşlylyk kesesi, paralel matrisalar.
Hasabatlar: JUnit/Allure + konteýner ýazgylarynyň artefaktlary (ýykylanda).
Gate: "ýaşyl unit + kritiki integration" - merziň şerti; e2e - nightly.

Matrisanyň mysaly (GitHub Actions, bölek):
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) Mikroservisler we wakalar

Hyzmat şertnamalary: OpenAPI/Protobuf wersiýalary; gabat gelmek synaglary (backward).

Event-driven:
  • Unit: domen wakalarynyň we üýtgeşiklikleriniň mappingi.
  • Integration: hakyky dellalda (Kafka) neşir etmek/ýazylmak, outbox/inbox semantika, exactly-once imitasiýa (iň bolmanda - idempotent).
  • Retraý/dublikat/tertipleşdiriş synaglary (out-of-order).

12) Integrationdaky maglumatlar we izolýasiýa

Her synag → özboluşly shema/DD (Testcontainers JDBC URL '? TC _ TMPFS =/var/lib/postgresql/data: rw').
Geleşik fiksturalary (begin → run → rollback) arassalamagy çaltlaşdyrýar.
Redis/kesh üçin - esasy prefiks 'test: $ {RUN _ ID}:' i 'FLUSHDB' in teardown.

13) iGaming/Maliýe aýratynlyklary

Pul we çäklendirmeler: property-based invariantlar üçin synaglar (balans ≥ 0, umumy çäklendirmeler).
Düzgünleşdiriji: žurnallaşdyryş barlagy (audit-log ýazylýar), üýtgemeýän wakalar.
Tölegler/PSP: HMAC/mTLS integrasiýa synaglary, 'Retry-After', idempotentlik, dedup 'jti'.
Jogapkär oýun: bosagalaryň/guldaunlaryň düzgünleriniň synaglary; "Düýn → Şu gün" fake clock.

14) Antipatternler

DB/NTTR-i ýokarlandyrýan "Unit" integration (gatlaklary bulaşdyrýar we CI-ni haýalladýar).
Boş sözlemler sebäpli ýokary coverage ("ýapyldy, ýöne barlanmady").
Şertnama zerur bolan ýerlerde üçünji tarap hyzmatlarynyň logikasy bozulýar (täzelenende bozulýar).
'sleep (5)' bilen geçirilen synaglar wakanyň/şertleriň ýerine.
Paralel synaglar üçin umumy synag DB → ýaryş we fleýka.

15) Prod-taýynlyk çek-sanawy

  • Piramida kesgitlenildi: Unit/Integration/E2E paýlarynyň% -i we aralyk wagty boýunça maksat.
  • Unit izolirlenen, çalt, serhet bahalaryny we üýtgemelerini öz içine alýar.
  • Integration, umumy ýagdaýlarsyz hermetik gurşawy (Testcontainers/Compose) ulanýar.
  • Şertnama synaglary (OpenAPI/Pact) CI-de tassyklanýar.
  • Synag maglumatlary - dolandyrylýan: seed/rollback/prefiksler, fake clock.
  • Paralel geçmek, JUnit/Allure hasabatlary, konteýner ýazgylarynyň artefaktlary.
  • Metrikler: duration, flaky rate, mutation score; pese gaçmak üçin alertler.
  • Töleg/webhuk ssenarileri: HMAC/mTLS, retrailer, idempotentlik, dedup.
  • Strategiýa resminamalary we synag şablonlarynyň mysallary.

16) TL; DR

Unit - iň ýokary logika, iň az gurşaw; Integration - iň az mok, iň ýokary realizm. Piramidany saklaň: Çalt Unit kemçilikleriň 80% -ini tutýar, Integration baglanyşyklary we şertnamalary tassyklaýar. Hermetik-konteýnerleri, şertnama synaglaryny, fake clock we paralelligi ulanyň. Diňe coverage däl, mutation score we flaky rate hem ölçäň. Töleg/webhuk-ýollaryny aýratyn barlaň: gollar, retralar we idempotentlik.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.