Skip to content

✅ Test - 일자리 기능 테스트 코드 #64

@uxxin

Description

@uxxin

🛠️ Issue Description

일자리 찾기 기능(JobService, JobOpenApiClient)의 핵심 비즈니스 로직(Redis 캐싱, 외부 API 조건부 호출, 데이터 변환)에 대한 단위 테스트 코드를 작성하여 기능의 신뢰성을 확보합니다.

💭 How to test

JobService를 중심으로 테스트하며, 모든 외부 의존성(External Dependency)을 Mocking하여 순수한 비즈니스 로직을 검증합니다.

Mocking 대상:

  • JobOpenApiClient: Mocking하여 외부 API의 응답(성공/실패/특정 데이터)을 제어하고, 실제 API 호출 여부 및 전달된 파라미터를 검증합니다.
  • RedisUtil: Mocking하여 Redis 캐시의 HIT 및 MISS 상황을 제어하고, 데이터 저장(save) 호출 여부를 검증합니다.

주요 검증 항목:
캐시 HIT 시 API 호출 건너뛰기 여부.
고용형태 'ALL' 입력 시 API 파라미터가 생략되는지 여부.
API 서버 오류(5xx) 시 WebClient의 재시도(Retry) 로직 정상 작동 여부.
상세 조회 시 캐시된 job:extra 데이터와 상세 API 응답의 조합 로직 검증.

📝 check-lists

  • 목록 캐싱 로직 검증:
  • Cache Miss 시 Open API 호출 및 jobs:list, job:extra 캐시 저장 확인.
  • Cache Hit 시 Open API 호출 없이 캐시된 데이터 반환 확인.
  • 고용형태 필터링 로직 검증:
  • empType에 "ALL" 입력 시 JobOpenApiClient 호출 시 emplymShp 파라미터가 생략되는지 확인.
  • 상세 조회 데이터 조합 검증:
  • job:detail Cache Miss 및 job:extra Cache Hit 시 데이터 조합 후 반환 확인.
  • job:extra Cache Miss (데이터 누락) 시 **"정보 없음"**으로 대체 처리되는지 확인.
  • API 클라이언트 안정성 검증 (WebClient):
  • Open API 호출 시 5xx 서버 오류 발생 시 3회 재시도 로직이 정상 작동하는지 확인.
  • Enum을 사용한 타입 변환 (mapEmploymentType, mapApplyMethod)이 정확한 displayName을 반환하는지 확인.
  • 마감일 D-day 계산 로직(calculateDday)의 정확성 검증.
  • Cache Miss 시 Open API 호출 및 jobs:list, job:extra 캐시 저장 확인.
  • Cache Hit 시 Open API 호출 없이 캐시된 데이터 반환 확인.
  • 고용형태 필터링 로직 검증:
  • empType에 "ALL" 입력 시 JobOpenApiClient 호출 시 emplymShp 파라미터가 생략되는지 확인.
  • 상세 조회 데이터 조합 검증:
  • ob:detail Cache Miss 및 job:extra Cache Hit 시 데이터 조합 후 반환 확인.
  • job:extra Cache Miss (데이터 누락) 시 **"정보 없음"**으로 대체 처리되는지 확인.
  • API 클라이언트 안정성 검증 (WebClient):
  • Open API 호출 시 5xx 서버 오류 발생 시 3회 재시도 로직이 정상 작동하는지 확인.
  • Enum을 사용한 타입 변환 (mapEmploymentType, mapApplyMethod)이 정확한 displayName을 반환하는지 확인.
  • 마감일 D-day 계산 로직(calculateDday)의 정확성 검증.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions