유닛 & 속성 기반 테스트 - LeeEuyJoon/lilling-be GitHub Wiki
1. 목적
기능적 로직(Base62, Scrambler, XORShift)의 정확성과 수학적 정합성을 검증한다.
2. Service Tests
Base62EncoderTest
Base62 인코더/디코더의 동작 검증.
| 분류 | 테스트 내용 |
|---|---|
| 입력값 검증 | null, 음수, M 초과 |
| 정상 동작 | 0, 작은 수, 큰 수 |
| 디코딩 가역성 | 임의 값 |
M = 62⁷ (3,521,614,606,208)
7자리 Base62로 표현 가능한 최대 범위
IdScramblerTest
XORShift 기반 스크램블러의 정상 동작 검증.
| 분류 | 테스트 내용 |
|---|---|
| 입력값 검증 | null, 음수, M 초과 |
| 정상 동작 | 작은 수 , 큰 수 |
| 검증 기준 | scrambled ≠ original, 0 ≤ scrambled < M |
테스트는 기능 단위별 정확성을 검증하며,
경계값을 포함한 모든 분기를 테스트함.
3. FeistelCipherUniqueness Tests
로직의 핵심은 **“고유성”과 “가역성”**이므로 속성 기반 검증을 병행한다.
PropertyBasedTest
- 랜덤 고유 ID 100개 × 10,000회 반복
- 랜덤 고유 ID 10,000개 × 100회 반복
- jqwik 사용
- 각 케이스마다
scramble(id)가 중복되지 않음을 검증
FullRangeTest
속성 기반 테스트만으로는 3.5조 범위에 대한 신뢰 확보가 어려움.
따라서 M을 100만으로 축소하여,
0~999,999 모든 고유 ID에 대해
스크램블 결과가 100만 개 전부 고유한지 전수 검증.
- HashSet에 모든 결과 삽입
- 중복 발생 시 즉시 실패
- 마지막에
set.size() == 1,000,000확인
ReversibilityTest
“가역성 = 1대1 대응”을 증명하는 논리적 검증.
랜덤 ID 10,000개에 대해
scramble → unscramble → original 일치 여부를 확인한다.
FullRangeTest가 물리적 증명이라면,
이 테스트는 이론적 정합성 보증 역할을 수행한다.