Skip to content

통합 테스트 (Integration Test)

통합 테스트시 API에 대한 테스트 항목은 다음의 내용을 포함하여야 한다.

Section titled “통합 테스트시 API에 대한 테스트 항목은 다음의 내용을 포함하여야 한다.”
  1. 로그인 하지 않은 상태에서 API를 요청하였을 경우에 UNAUTHORIZED(401) 응답코드를 확인
  2. Request DTO의 유효성(validation) 설정에 일치하지 않는 경우 BAD_REQUEST(400) 응답코드를 확인
  3. API 권한이 없는 상태에서 테스트했을때 FORBIDDEN(403) 응답코드가 발생하는지 확인
  4. 메뉴 권한이 없는 상태에서 테스트했을때 FORBIDDEN(403) 응답코드가 발생하는지 확인
  5. 정상 수행시 상황에 맞는 응답코드를 확인하고 반환된 데이터가 규격에 맞는지 확인
    1. SUCCESS(200): 일반적으로 성공시에 반환되는 응답코드
    2. CREATED(201): 데이터가 정상적으로 생성되었을 때 반환되는 응답코드
    3. NO_CONTENT(204): 데이터가 정상적으로 삭제되었을 때 반환되는 응답코드
  6. 런타임 오류 발생시 ApiResultCode에 정의된 오류코드가 반환되는지 확인
  7. 테이블 단위로 데이터 CRUD 테스트
  8. 그 외 비지니스 로직 테스트
  1. Json Test
    @DisplayName("로그인 테스트")
    @Test
    fun 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())
    }
    }
  2. Multipart Test
    @DisplayName("신규 등록시 유효성 체크 - 성공 케이스")
    @Test
    fun 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())
    }
    }