[이벤트 생성 API 개발]_01_이벤트 API 테스트 클래스 생성

1 minute read

Event 생성 API 구현: 테스트 만들자

스프링 부트 슬라이스 테스트

  • @WebMvcTest
    • MockMvc 빈을 자동 설정 해준다. 따라서 그냥 가져와서 쓰면 됨.

    • 웹 관련 빈만 등록해 준다. (슬라이스)

      ⇒ 모든 빈을 등록하지 않아서 빠르다.

      단위테스트라고 하기에는 많은 것들이 개입되어 있다.

MockMvc

  • 스프링 MVC 테스트 핵심 클래스
  • 웹 서버를 띄우지 않고도 스프링 MVC (DispatcherServlet)가 요청을 처리하는 과정을 확인할 수 있기 때문에 컨트롤러 테스트용으로 자주 쓰임.
  • Mocking 되어있는 디스패처 서블릿을 상대로 가짜 요청을 만들어서 보내고 응답을 확인할 수있는 테스트를 만들 수 있다.

테스트 할 것

  • 입력값들을 전달하면 JSON 응답으로 201이 나오는지 확인.
    • Location 헤더에 생성된 이벤트를 조회할 수 있는 URI 담겨 있는지 확인.
    • id는 DB에 들어갈 때 자동생성된 값으로 나오는지 확인
  • 입력값으로 누가 id나 eventStatus, offline, free 이런 데이터까지 같이 주면?
    • Bad_Request로 응답 vs 받기로 한 값 이외는 무시
  • 입력 데이터가 이상한 경우 Bad_Request로 응답
    • 입력값이 이상한 경우 에러
    • 비즈니스 로직으로 검사할 수 있는 에러
    • 에러 응답 메시지에 에러에 대한 정보가 있어야 한다.
  • 비즈니스 로직 적용 됐는지 응답 메시지 확인
    • offline과 free 값 확인
  • 응답에 HATEOA와 profile 관련 링크가 있는지 확인.
    • self (view)
    • update (만든 사람은 수정할 수 있으니까)
    • events (목록으로 가는 링크)
  • API 문서 만들기
    • 요청 문서화
    • 응답 문서화
    • 링크 문서화
    • profile 링크 추가

EventController를 만들기 전 테스트 먼저 작성

@WebMvcTest로 스프링 부트 슬라이스 테스트

  • 단위테스트라고 하기에는 많은 것들이 개입되어 있다. EventController 뿐만 아니라 디스패처 서블릿이 가지고 있는 Data Mapper, Converter들이 다 조합된 상태로 동작하는 테스트이다.

이벤트 생성 요청 시 JSON 응답으로 201이 나오는지 확인

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class)
@WebMvcTest
public class EventControllerTests {

    @Autowired
    MockMvc mockMvc;

    @Test
    public void createEvent() throws Exception {
        mockMvc.perform(post("/api/events/") // 이벤트 생성 요청
        .contentType(MediaType.APPLICATION_JSON) // Request body 데이터 형태
        .accept(MediaTypes.HAL_JSON)) // Response 데이터 타입
                .andExpect(status().isCreated()); // 201 응답코드
    }
}