GH GambleHub

단위 대 통합 테스트

1) 테스트 유형을 구별하는 이유

테스트의 적절한 과립화로 개발이 예측 가능해졌습니다. 단위 캐치 논리 결함이 빠르고 저렴합니다. 통합은 모듈 묶음, 실제 전송 및 접착제 번들을 점검합니다. "함께 회귀를 줄이고 방출을 가속화합니다.

2) 정의와 경계

단위 테스트

작은 동작 단위 (기능, 클래스, 사용 사례) 를 단독으로 테스트합니다.
외부 종속성이 교체됩니다 (mock/stub/fake).
빠른 (ms-tens of ms), 결정 론적.

통합 테스트

데이터베이스, 브로커 (Kafka/RabbitMQ), TP/gRPC, 파일 시스템, 캐시 등 여러 실제 구성 요소의 상호 작용을 확인합니다.
최소 mocs, 실제 프로토콜.
느리게 (수백 ms- 초) 지원이 더 비쌉니다.

💡 규칙: "프로세스/소켓/DB" 를 거치는 즉시 - 이미 통합 수역에 있습니다.

3) 피라미드 테스트 (얼음 뿔이 아님)

재단: 단위 (70-80%) -저렴하고 빠릅니다.
중간 계층: 통합/구성 요소 (15-25%) - 중요한 경로 및 계약.
상단: E2E/UX/Exploratory (5-10%) -최소한으로 충분합니다.
측면: 품질 증폭기로서의 정적 분석/린트/유형 점검 및 돌연변이 테스트.

4) 단위 제공 및 통합 대상

작업타입어떤 이유로
순수한 비즈니스 로직 (유효성 검사, 커미션 계산, 주요 dempotence)단위빠르고 결정적이며 많은 경계 값
메이핑 DTO 모델, 직렬화, 구문 분석단위많은 경우, 쉽게 분리 할 수 있습니다
리포지토리/ORM 쿼리통합 (dB 테스트 DB)"행동" ORM 및 SQL 뉘앙스는 라이브 데이터베이스에서만 볼 수 있습니다
HTP 계약 (상태, 헤더, 스키마)통합/계약라이브 HTT + JSON 스키마/OpenAPI 스택 필요
사가/전송, 레트라, 마감일통합/구성 요소타이밍, 트랜잭션, 브로커
게이트웨이 속도 제한통합리디스/상태/타임 아웃
결제 웹 후크 (HMAC, 반복)통합/CDC서명, 시간, 네트워크 기능

5) 데이터 및 수정

단위

인라인 픽션/빌더 (공장 방법).
경계 값에 대한 테이블 중심 테스트.
불변에 대한 속성 기반 접근 방식 (예: "직불 합계 = 크레딧 합계").

통합

밀폐 환경: 테스트 컨테이너/Docker Compose는 'postgres + redis + kafka + wiremock' 을 올립니다.
데이터베이스/캐시의 초기 시드 및 이후 정리 (트랜잭션/롤백, 잘림).
시계/타이머는 가짜 (제어) 입니다. 그렇지 않으면 플랙입니다.

6) 도구 및 패턴

Mocks/Stubs/Fakes/Spies:
  • 스터브는 고정 된 답변입니다 (저렴한).
  • 모의-상호 작용/통화 수를 확인하십시오.
  • 가짜는 단순화 된 구현입니다 (예: In-Memory Repo).
  • 계약 테스트 (CDC): Pact/Swagger 기반-고객의 기대치를 수정하고 공급자를 확인하십시오.
  • WireMock/MockServer-타사 서비스를위한 HTT 스터브.
  • 테스트 컨테이너는 "동물원" 이없는 로컬 및 CI의 라이브 DB/브로커입니다.

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 통합: 웹훅 시그니처 (HMAC) + 반복

bash docker-compose: app + redis + wiremock (PSP)
docker compose -f docker-compose. test. yml up -d pytest -m "integration and webhook" -q
테스트:
  • WireMock은 'X-Timestamp' 및 서명이있는 이벤트를 제공합니다.
  • 응용 프로그램은 '이벤트 _ id' 로 중복되는 HMAC를 확인하고 5 초 후에 반복하면 두 배가되지 않습니다.
  • 우리는 '200' 을 확인하고 항목이 하나뿐입니다.

7. 3 CDC: 공급자와의 고객 계약

클라이언트는 협정을 생성합니다 (대기: 'POST/v1/payout' → '201' 다이어그램).
CI의 제공 업체는 계약 상태를 확인합니다.

8) 속도, 병렬 처리, 플레이크

장치는 테스트 당 <100ms를 실행해야합니다. 패킷-초

통합 - 컨테이너/포트에 의해 병렬; 시작 마이그레이션 사용.

색다른 해독제:
  • 제어 된 시간 (가짜 시계),
  • "수면" 이 아닌 명시 적 사건에 의한 기대
  • 안정적인 임계 값 (지터 테스트가있는 retrai).

9) 품질 지표

적용 범위 (줄/분기): 추세를 관찰하는 데 유용하지만 대상은 관찰하지 않습니다.
돌연변이 테스트 (PIT/Mutmut): 암살자의 실제 힘인 잘못된 변화를 "죽이는" 지 여부를 보여줍니다.
테스트 기간 및 색다른 속도: 성장시 경고.
격리 결함: 생산 전에 차단 된 버그의 비율.

10) CI/CD에 포함

작업: 단위 → 통합 → e2e (서비스 별 팬 아웃).
데이터베이스/언어/버전별 종속 캐시, 병렬 행렬.
보고서: JUnit/Allure + 컨테이너 로그 아티팩트 (방울).
게이트: "녹색 단위 + 임계 통합" - 병합 조건; 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/Protoqua가 버전으로 표시됩니다. 호환성 테스트 (후진).

이벤트 중심:
  • 단위: 도메인 이벤트 매핑 및 불변.
  • 통합: 실제 중개인 (Kafka) 의 출판/구독, 아웃 박스/받은 편지함 의미론, 정확히 한 번 모방 (적어도-demempotent).
  • 주문 외 테스트.

12) 통합 데이터 및 격리

각 테스트 → 고유 한 스키마/데이터베이스 (테스트 컨테이너 JDBC IM '? TC _ TMPFS =/var/lib/postgresql/data: rw ').
거래 수정 (실행 → 롤백 시작) 청소 속도 향상.
Redis/cash의 경우 주요 접두사는 'test: $ {RUN _ ID}:' 및 'FLUSHDB' in 분해입니다.

13) iGaming/Finance의 세부 사항

돈과 한도: 불변량에 대한 속성 기반 테스트 (밸런스 3, 총 제한).
규제: 로깅 점검 (감사 로그가 작성 됨), 변경할 수없는 이벤트.
결제/PSP: HMAC/mSL 통합 테스트, '재시도 후', demempotency, dedup 'jti'.
책임있는 플레이: 임계 값/쿨 다운 규칙 테스트; 가짜 시계의 "vchera → segodnya".

14) 안티 패턴

DB/HTTP를 높이는 "단위" 는 이미 통합되어 있습니다 (레이어를 혼동하고 CI를 느리게합니다).
빈 문으로 인한 높은 적용 범위 ("덮었지만 확인하지 않음").
계약이 필요한 타사 서비스의 모키 논리 (업데이트시 중단).
이벤트/조건 기대 대신 '수면 (5)' 으로 테스트하십시오.

병렬 테스트 → 레이스 및 플레이크에 대한 일반적인 테스트 데이터베

15) Prod 준비 점검표

  • 피라미드는 런타임별로 단위/통합/E2E 및 대상 주식의% 로 정의됩니다.
  • 단위는 분리되고 빠르며 경계 값과 불변량을 포함합니다.
  • 통합은 공통 상태없이 밀폐 환경 (테스트 컨테이너/컴퓨터) 을 사용합니다.
  • 계약 테스트 (OpenAPI/Pact) 는 CI에서 검증됩니다.
  • 테스트 데이터-관리: 시드/롤백/접두사, 가짜 시계.
  • 병렬 실행, JUnit/Allure 보고서, 컨테이너 로그 아티팩트.
  • 측정: 지속 시간, 색다른 속도, 돌연변이 점수; 열화에 대한 경고.
  • 지불/웹 후크 시나리오: HMAC/mSL, retrai, demempotency, 데드 업.
  • 전략 문서 및 샘플 테스트 템플릿.

16) TL; DR

단위 - 최대 논리, 최소 환경; 통합 - 최소 모크, 최대 사실주의. 피라미드를 잡으십시오: 고속 장치는 결함의 80% 를 포착하고 통합은 번들 및 계약을 확인합니다. 밀폐 용기, 계약 테스트, 가짜 시계 및 병렬 처리를 사용하십시오. 적용 범위뿐만 아니라 돌연변이 점수 및 색다른 속도도 측정하십시오. 특히 서명, 배상 및 demotency와 같은 결제/웹 후크 경로를 확인하십시오.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.