테스트 시나리오 설계 - leonroars/slam GitHub Wiki

Chapter.8 테스트 시나리오 설계

I. user Aggregate

1. 단위 테스트

Domain Model : 비즈니스 로직 검증 단위 테스트

  • Point : 정책 상 최대 포인트 잔액 초과 시 예외 / 음수 포인트 증가 or 잔액 이상 차감 시 예외 발생
  • User : 최초 회원 생성 시 포인트 잔액 0원.

Domain Service : 단위 테스트

UserService

  • 성공 : 회원 저장 / 회원 조회 테스트
  • 실패 : 이미 존재하는 회원 저장 시도 시 실패 / 일치 회원 존재하지 않을 경우 예외? Empty List?????????

PointService : 포인트 사용/충전 테스트, 포인트 사용/충전 시 PointHistory 생성 검증

2. 통합 테스트

<기본 기능에 대한 통합테스트>

  • 존재하지 않는 사용자에 대한 포인트 충전/사용 시도 시 예외 발생하며 실패 (실파)
  • 존재하는 사용자의 잔액 이상 포인트 사용 시도 시 실패 / 충전 시 잔액이 정책 상 허용 범위 초과할 경우 충전 시도 실패. (실패)
  • 사용자가 존재하며 적법한 포인트 사용/충전의 경우 성공한다. (성공)
  • 적법한 포인트 사용/충전 시 포인트 사용 내역 생성된다. (성공)

<동시성 시나리오에서의 기능에 대한 통합테스트>

  • 동일 사용자에 대한 동시 충전/동시 사용 발생 상황 테스트
  • 다수 사용자에 대한 동시 충전/동시 사용 발생 상황 테스트

II. concert Aggregate

  1. 단위 테스트

Domain Model : 비즈니스 로직 검증 단위 테스트

  • ConcertSchedule : Validation 테스트(일정 등록 시 허용되지 않는 시간(26시 등) 등록 시도 시 예외 발생, 시작시간이 종료시간 보다 늦을 경우 예외 발생)
  • Repository : 단위 테스트
  • Domain Service : 단위 테스트
  1. 통합 테스트

II. reservation Aggregate

  1. 단위 테스트
    • Domain Model : 비즈니스 로직 검증 단위 테스트
    • Reservation : 비즈니스 로직 없음.
    • Seat : number > 50일 경우 예외 발생 (Business Rule 검증)
    • Repository : 단위 테스트
    • Domain Service : 단위 테스트 (ReservationService, SeatService)
      • 예약 가능 날짜가 지난 공연은 '예약 가능 날짜 조회'에서 제외된다.
      • 일정 상 예약 가능하며, 잔여 좌석 존재하는 공연에 대한 조회가 성공적으로 처리된다.
      • 일정 상 예약 가능하나, 잔여 좌석 존재하지 않는 공연은 조회가 되지 않는다. (위와 합칠 수 있을 것 같은데... 명시적으로 분리해서 수행하는 게 좋아보임)
      • seat_status == unavailable인 경우 해당 좌석은 '예약 가능 좌석 조회'에서 제외된다.
      • 'seat_status' == 'available'인 경우, '예약 가능 좌석 조회'에 포함된다.
      • seat_status == available인 경우 해당 좌석에 대한 예약 시도 성공
      • 예약 취소 시 해당 좌석은 다시 available 상태가 된다.
      • 예약 생성 시 해당 좌석은 unavailable 상태가 된다.
      • 예약 변경 시(좌석 변경) 기존 좌석의 unavailable은 해제되고 새로운 좌석이 unavailable 상태가 된다.
  2. 통합 테스트 : 동시성 검증 및 스케쥴러를 활용한 기능 검증
    • 예약 생성 시점으로부터 5분 경과 시에도 UNPURCHASED 상태인 예약내역 삭제
    • 같은 공연 일정, 같은 좌석에 대한 동시 예매 시도 시 한 건만 성공한다.
    • 결제 미완료 되어 삭제된 좌석에 대한 예매 시도가 성공한다.
    • 51명 예약 시도 시 50명만 성공한다.(순차적 진행) : 비즈니스 정책(좌석은 50석 존재)에 대한 통합 테스트.

III. queue : Component

  1. 단위 테스트 -
  2. 통합테스트 : polling 시 남은 대기 인원 정확도 측정

IV. Application(Usecase) 계층에 대한 통합 테스트

  • 51명 동시 예약 신청한다.
  • Batch Size 만큼만 동시 예약이 진행된다. 나머지는 대기열에 존재한다.
  • 매진 시(50명 예약 완료) 시 남은 1명은 실패한다.