RESTAPI

RESTAPI - Event 생성 API - TEST Class

엔꾸꾸 2019. 8. 5. 22:39

REST API - Event API TEST Class

  • TEST Class 생성

 

@RunWith

  • 테스트 코드는 Junit기반으로 진행
  • @RunWith(SpringRunner.class) SpringBoot Test를 위한 SpringRunner class를 지정

 

@WebMvcTest

  • Web과 관련있는 빈들만 등록이 된다.
  • MockMvc가 자동적으로 설정되어 MockMvc를 주입받아 사용할 수 있다.

 

MockMvc

  • Spring Mvc 핵심 클래스
  • Mocking되어있는 DispatcherServlet을 상대로 가짜 요청을 만들어 테스트가 가능하다.
  • 웹 서버를 띄우지 않기때문에 좀 더 빠르다.
  • Slicing Test라고 부른다.

 

 

테스트 해야할것 ?

  • 입력값을 전달한다면 JSON 응답 201이 나오는가 ?
    • Location 헤더에 생성된 이벤트를 조회할수 있는 URI 가 존재하는가 ?
    • ID는 DB INSERT시 자동생성된 값으로 나오는가 ?
  • 입력 값으로 누가 ID, eventStatus, offline, free 와 같은 데이터까지 같이 준다면 ?
    • badRequest or 받기로한 값 이외는 무시
  • 입력 데이터가 이상한경우 bad_Request
    • 입력한 값이 이상한가 ?
    • 비즈니스 로직으로 검사가능한 에러 ?
    • 에러 응답 메시지에 에러에 대한 정보가 존재해야한다.
  • 비즈니스 로직 적용 되었는지 응답 메시지 확인
    • offline, free 값 확인
  • 응답에 HATEOAS와 profile관련 링크가 존재하는가 ?
    • self(view)
    • update(생성한사람은 수정이 가능하다)
    • events(목록으로 이동하는 링크)
  • API 문서화
    • 요청 문서화
    • 응답 문서화
    • 링크 문서화
    • profile 링크 추가

 

테스트 코드

  • mockMvc.perform() // 가짜 요청을 만든다.
  • get(), post(), put() .. 각 HTTP Method에 맞는 가짜 요청을 보낸다.
  • contentType(): 요청 본문의 컨텐츠 타입
  • accept(): Accpet-Header 원하는 응답의 컨텐츠 타입
  • andExcept(): 결과를 assertion 할수 있다.
    • status(): 응답코드
    • isCreated(): 201 응답인지 assertion 한다
    • is(STATUS_CODE): 로 원하는 응답코드를 직접 사용할수 있다.
    • 응답코드를 직접 사용하는것 보다는 각 응답에 대한 메서드들을 사용할것. TYPE-SAFE한 코드가 된다.