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.
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
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.
- 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.
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.