통합 테스트 (Integration Test)
통합 테스트시 API에 대한 테스트 항목은 다음의 내용을 포함하여야 한다.
Section titled “통합 테스트시 API에 대한 테스트 항목은 다음의 내용을 포함하여야 한다.”- 로그인 하지 않은 상태에서 API를 요청하였을 경우에 UNAUTHORIZED(401) 응답코드를 확인
- Request DTO의 유효성(validation) 설정에 일치하지 않는 경우 BAD_REQUEST(400) 응답코드를 확인
- API 권한이 없는 상태에서 테스트했을때 FORBIDDEN(403) 응답코드가 발생하는지 확인
- 메뉴 권한이 없는 상태에서 테스트했을때 FORBIDDEN(403) 응답코드가 발생하는지 확인
- 정상 수행시 상황에 맞는 응답코드를 확인하고 반환된 데이터가 규격에 맞는지 확인
- SUCCESS(200): 일반적으로 성공시에 반환되는 응답코드
- CREATED(201): 데이터가 정상적으로 생성되었을 때 반환되는 응답코드
- NO_CONTENT(204): 데이터가 정상적으로 삭제되었을 때 반환되는 응답코드
- 런타임 오류 발생시 ApiResultCode에 정의된 오류코드가 반환되는지 확인
- 테이블 단위로 데이터 CRUD 테스트
- 그 외 비지니스 로직 테스트
테스트 샘플 코드
Section titled “테스트 샘플 코드”- Json Test
@DisplayName("로그인 테스트")@Testfun loginTest() {//로그인val param: RequestDto<LoginRequest> = RequestDto(LoginRequest("hong@test.com", "abcd4321", null))Given {spec(jsonRequestSpecification)body(param)} When {post("/auth/login")} Then {statusCode(HttpStatus.SC_OK)body("isSuccess", equalTo(true),"payload", notNullValue(),"payload.sessionUser", notNullValue(),"payload.sessionUser.userId", equalTo(1000),"payload.sessionUser.email", equalTo("hong@test.com"),"payload.sessionUser.name", equalTo("홍길동"),)} Extract {println(body().asString())}//세션 정보 조회Given {spec(jsonRequestSpecification)} When {post("/auth/get-session-user")} Then {statusCode(HttpStatus.SC_OK)body("isSuccess", equalTo(true),"resultCode", equalTo("SUCCESS"),"payload", notNullValue(),"payload.sessionUser", notNullValue(),"payload.sessionUser.userId", equalTo(1000),"payload.sessionUser.email", equalTo("hong@test.com"),"payload.sessionUser.name", equalTo("홍길동"),)} Extract {println(body().asString())}}
- Multipart Test
@DisplayName("신규 등록시 유효성 체크 - 성공 케이스")@Testfun insertValidationSuccessTest() {return Given {spec(multipartRequestSpecification)formParam("title", "test")formParam("content", "test")multiPart("photo", "sample2.jpg", readResourceFileAsBytes("sample/image/sample2.jpg"), MediaType.IMAGE_JPEG_VALUE)} When {post("/photo-board")} Then {statusCode(HttpStatus.SC_CREATED)} Extract {println(body().asString())}}