테스트 시나리오 설계 - leonroars/slam GitHub Wiki
Chapter.8 테스트 시나리오 설계
user
Aggregate
I. 1. 단위 테스트
Domain Model : 비즈니스 로직 검증 단위 테스트
Point
: 정책 상 최대 포인트 잔액 초과 시 예외 / 음수 포인트 증가 or 잔액 이상 차감 시 예외 발생User
: 최초 회원 생성 시 포인트 잔액 0원.
Domain Service : 단위 테스트
UserService
- 성공 : 회원 저장 / 회원 조회 테스트
- 실패 : 이미 존재하는 회원 저장 시도 시 실패 / 일치 회원 존재하지 않을 경우 예외? Empty List?????????
PointService
: 포인트 사용/충전 테스트, 포인트 사용/충전 시 PointHistory 생성 검증
2. 통합 테스트
<기본 기능에 대한 통합테스트>
- 존재하지 않는 사용자에 대한 포인트 충전/사용 시도 시 예외 발생하며 실패 (실파)
- 존재하는 사용자의 잔액 이상 포인트 사용 시도 시 실패 / 충전 시 잔액이 정책 상 허용 범위 초과할 경우 충전 시도 실패. (실패)
- 사용자가 존재하며 적법한 포인트 사용/충전의 경우 성공한다. (성공)
- 적법한 포인트 사용/충전 시 포인트 사용 내역 생성된다. (성공)
<동시성 시나리오에서의 기능에 대한 통합테스트>
- 동일 사용자에 대한 동시 충전/동시 사용 발생 상황 테스트
- 다수 사용자에 대한 동시 충전/동시 사용 발생 상황 테스트
- 특
concert
Aggregate
II. - 단위 테스트
Domain Model : 비즈니스 로직 검증 단위 테스트
ConcertSchedule
: Validation 테스트(일정 등록 시 허용되지 않는 시간(26시 등) 등록 시도 시 예외 발생, 시작시간이 종료시간 보다 늦을 경우 예외 발생)- Repository : 단위 테스트
- Domain Service : 단위 테스트
- 통합 테스트
reservation
Aggregate
II. - 단위 테스트
- 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
상태가 된다.
- 통합 테스트 : 동시성 검증 및 스케쥴러를 활용한 기능 검증
- 예약 생성 시점으로부터 5분 경과 시에도
UNPURCHASED
상태인 예약내역 삭제 - 같은 공연 일정, 같은 좌석에 대한 동시 예매 시도 시 한 건만 성공한다.
- 결제 미완료 되어 삭제된 좌석에 대한 예매 시도가 성공한다.
- 51명 예약 시도 시 50명만 성공한다.(순차적 진행) : 비즈니스 정책(좌석은 50석 존재)에 대한 통합 테스트.
- 예약 생성 시점으로부터 5분 경과 시에도
queue
: Component
III. - 단위 테스트 -
- 통합테스트 : polling 시 남은 대기 인원 정확도 측정
IV. Application(Usecase) 계층에 대한 통합 테스트
- 51명 동시 예약 신청한다.
- Batch Size 만큼만 동시 예약이 진행된다. 나머지는 대기열에 존재한다.
- 매진 시(50명 예약 완료) 시 남은 1명은 실패한다.