유닛 & 속성 기반 테스트 - 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가 물리적 증명이라면,
이 테스트는 이론적 정합성 보증 역할을 수행한다.