GH GambleHub

בדיקות יחידה נגד אינטגרציה

1) מדוע להבחין בין סוגי מבחנים

גרנולציה נכונה של בדיקות גורמת להתפתחות להיות צפויה מראש: היחידה תופסת פגמים לוגיים במהירות ובזול; אינטגרציה בודקת חבילות של מודולים, תחבורה אמיתית ו "דבק. "יחד, הם מפחיתים רגרסיה ומאיצים שחרור.

2) הגדרות וגבולות

מבחן יחידה

בוחן יחידה קטנה של התנהגות (פונקציה, כיתה, שימוש במקרה) בבידוד.
תלות חיצונית מוחלפת (דמה/יתד/זיוף).
מהיר (ms-עשרות ms), דטרמיניסטי.

מבחן אינטגרציה

בודק את האינטראקציה של מספר רכיבים ממשיים: מסד נתונים, ברוקר (Kafka/RabbitMQ), HTTP/gRPC, מערכת קבצים, מטמון.
מינימום מוקדים, פרוטוקולים אמיתיים.
איטי יותר (מאות ms-שניות), יקר יותר בתמיכה.

💡 כלל: ברגע ”אנו עוברים את התהליך/שקע/DB” - אנחנו כבר נמצאים במים אינטגרטיביים.

3) פירמידת בדיקה (לא קרן קרח)

קרן: יחידה (70-80% במספר) - זול, מהיר.
שכבה אמצעית: אינטגרציה/רכיב (15-25%) - מסלולים וחוזים קריטיים.
למעלה: E2E/UX/Exploratory (5-10%) - מספיק מינימלי.
בצדדים: Static Analysis/Lint/Type Check ו-Mutation Checking כמגברי איכות.

4) מה לתת ליחידה ומה לאינטגרציה

משימההקלדמאיזו סיבה?
לוגיקה עסקית טהורה (אימות, חישובי עמלות, אידמפוטנטיות מפתח)יחידהמהיר, דטרמיניסטי, ערכי גבול רבים
מפיות DTO↔model, סריאליזציה, ניתוחיםיחידהבמקרים רבים, קל לבודד
פוזיציות/שאילתות ORMאינטגרציה (בדיקת DB)ניואנסים של ORM ו ־ SQL נראים רק במסד נתונים חי
חוזה HTTP (סטטוסים, כותרות, סכמות)אינטגרציה/חוזהזקוק לערימת HTTP + JSON SCHEMA/OpenAPI
סאגה/תיבה חיצונית, Retras, דד ־ לייןאינטגרציה/רכיבזמנים, עסקאות, ברוקר
הגבלת קצב השעראינטגרציהרדיס/מצב/פסקי זמן
קובצי אינטרנט בתשלום (HMAC, חוזר)אינטגרציה/CDCחתימות, שעות, מאפייני רשת

5) נתונים ותיקונים

יחידה

fictions/builders (שיטות המפעל).
מבחנים מונעי שולחן לערכי גבול.
גישה מבוססת נכס לאינווריאנטים (למשל: ”סכום חיובים = סכום הקרדיטים”).

אינטגרציה

סביבה הרמטית: Testcontainers/Docker Compose מעלה את 'postgres + redis + kafka + vallmock'.
זרעים ראשוניים במסד הנתונים/מטמון וניקוי לאחר (trunction/rollback, truncate).
שעונים/טיימרים מזויפים (מבוקרים), אחרת פלקס.

6) כלים ותבניות

לועגים/תלתלים/זיופים/מרגלים:
  • סטוב הוא תשובה קבועה (זולה).
  • דמה - בדוק אינטראקציות/מספר שיחות.
  • זיוף הוא יישום פשוט (לדוגמה, In-Memory Repo).
  • בדיקת חוזה (CDC): Pact/Swagger מבוסס - לתקן את ציפיות הלקוח ולבדוק את הספק.
  • סתר Mock/MockServer - תלושי HTTP עבור שירותי צד שלישי.
  • בוחני הבדיקות הם סוכני DBs/Brookers חיים באופן מקומי ובמודיעין ללא ”גן חיות”.

7) דוגמאות

7. 1 יחידה: תשלום אידמפוטנטיות (פסאודוקודה)

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 אינטגרציה: חתימת Webhook (HMAC) + חזרה

bash docker-compose: app + redis + wiremock (PSP)
docker compose -f docker-compose. test. yml up -d pytest -m "integration and webhook" -q
בדיקה:
  • SarlMock נותן אירוע עם 'X-Timestamp' וחתימה.
  • היישום בודק את HMAC, מתכפל על ידי "event _ id', חוזר אחרי 5 שניות לא יוצר כפול.
  • אנחנו בודקים '200' וכי יש רק כניסה אחת.

7. 3 CDC: חוזה לקוחות לספק

הלקוח יוצר ברית (המתנה: POST/v1/payout ”201” עם תרשים).
הספק במודיע מנהל את אימות החוזה בדוכן העדים שלו.

8) מהירות, מקביליות, פתיתים

יחידות חייבות לרוץ <100 ms לבדיקה; חבילה - שניות.
אינטגרציה - במקביל למכולות/נמלים; השתמש בנדידות התחלה.

נוגדן צעקני:
  • זמן מבוקר (שעון מזויף),
  • ציפיות ”על ידי אירוע מפורש,” לא ”שינה”,
  • סף יציב (רטריי עם מבחן ג 'יטר דטרמיניסטי).

9) מדדים איכותיים

כיסוי (קווים/ענפים): שימושי לצפייה במגמה, אך לא למטרה.
בדיקת מוטציה (PIT/Mutmut): מראה האם בדיקות ”הורגות” שינויים שגויים - הכוח האמיתי של המתנקשים.
משך בדיקה וקצב רעוע: התראות על צמיחה.
בלימת פגם: הפרופורציה של באגים יורטו לפני הייצור.

10) הטבעה ב ־ CI/CD

עבודות: יחידה = אינטגרציה = e2e (מאוורר על ידי שירות).
מטמון תלות, מטריצות מקבילות על ידי מסד נתונים/שפה/גירסה.
דיווחים: Junit/Allure + container log artists (לטיפות).
שער: ”יחידה ירוקה + אינטגרציה קריטית” - מצב מיזוג; e2e - בלילה.

דוגמה למטריקס (פעולות GitHub, שבר):
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) מיקרו ־ רווחים ומאורעות

חוזי שירות: OpenAPI/Protobuf מבוססים; מבחני תאימות (אחורה).

מונע אירועים:
  • יחידה: מיפוי אירועים דומיין ואינווריאנטים.
  • אינטגרציה: פרסום/מנוי בברוקר אמיתי (קפקא), סמנטיקה של תיבת דוא "ל, חיקוי של פעם אחת בדיוק (לפחות - אידמפוטנט).
  • מבחנים לא מסודרים.

12) מידע ובידוד באינטגרציה

כל מבחן = סכימה/מסד נתונים ייחודי (Testcontainers JDBC URL '? TC _ TMPFS =/var/lib/postgresql/data: rw.
תיקוני Transactional (להתחיל להריץ rollback) מאיצים את הניקיון.
עבור Redis/cache, קידומת המפתח היא 'מבחן: $ _ Run _ ID:' ו- 'FLUSHDB theardown.

13) פרטים של iGaming/Finance

כסף ומגבלות: בדיקות מבוססות רכוש לאינווריאנטים (שיווי משקל 0, סה "כ הגבלות).
רגולציה: בדיקת רישום (יומן ביקורת נכתב), אירועים בלתי ניתנים לשינוי.
תשלומים/PSP: מבחני שילוב HMAC/mTLS, "Retry-After", idempotency, dedup 'jti ".
משחק אחראי: מבחני חוק סף/התקררות; ”vchera = segodnya” בשעון מזויף.

14) תרופות אנטי ־ פטריות

יחידות המעלות DB/HTTP הן כבר אינטגרציה (לבלבל שכבות ולהאט את CI).
כיסוי גבוה בשל הצהרות ריקות (”מכוסה, אך לא מסומן”).
לוגיקה של מוקי בשירותי צד שלישי בה יש צורך בחוזה (שובר כאשר מעודכן).
בדיקות עם 'שינה (5)' במקום ציפיות אירוע/מצב.
בסיס נתונים נפוץ לבדיקות מקבילות * גזע ופתיל.

15) רשימת מוכנות למומחים

[ ] פירמידה המוגדרת כאחוז ממניות Unit/Integration/E2E והמטרה על ידי זמן ריצה.
[ יחידות ] מבודדות, מהירות, מכסות את ערכי הגבולות ואת האינווריאנטים.
[ אינטגרציה ] משתמשת בסביבה הרמטית (Testcontainers/Compose), ללא מצבים נפוצים.
[ מבחני חוזה ] (OpenAPI/Pact) מאומתים ב ־ CI.
[ ] נתוני בדיקה - מנוהל: זרעים/רולבוב/קדימות, שעון מזויף.
[ ] ריצה מקבילה, דו "חות Junit/Alure, פריטי רישום מכולות.
[ ] Metrics: משך, קצב רעוע, ציון מוטציה; התראות להשפלה.

תרחישי תשלום/webhook: HMAC/mTLS, retrai, idempotency, deatup.

[ ] תיעוד אסטרטגיה ותבנית בדיקה לדוגמה.

16) TL; DR

יחידה - היגיון מקסימלי, סביבה מינימלית; אינטגרציה - מינימום גושים, ריאליזם מקסימלי. יחידות מהירות תופסות 80% מהפגמים, אינטגרציה מאשרת חבילות וחוזים. השתמש במכלים הרמטיים, בדיקות חוזה, שעון מזויף ומקביליות. למדוד לא רק כיסוי, אלא גם ציון מוטציה וקצב רעוע. במיוחד בדוק את נתיבי התשלום/webhook: חתימות, מגשים מחדש ואידמפוטנטיות.

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

בלחיצה על הכפתור אתם מסכימים לעיבוד הנתונים שלכם.