개발강의정리/Spring

[스프링 기반 REST API 개발] 2-1. Event 생성 API 구현: 테스트 만들자

nineDeveloper 2019. 12. 28.
728x90

스프링 기반 REST API 개발

2. 이벤트 생성 API 개발

포스팅 참조 정보

GitHub

공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다

해당 포스팅에 대한 내용의 GitHub 주소

실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다

https://github.com/freespringlecture/spring-rest-api-study/tree/chap02-01_test

해당 포스팅 참고 인프런 강의

https://www.inflearn.com/course/spring_rest-api/dashboard

실습 환경

  • Java Version: Java 11
  • SpringBoot Version: 2.1.2.RELEASE

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

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

@WebMvcTest

  • MockMvc 빈을 자동 설정 해준다 따라서 그냥 가져와서 쓰면 됨
  • 웹 관련 빈만 등록해 준다 (슬라이스)

    MockMvc

    • 스프링 MVC 테스트 핵심 클래스
    • 웹 서버를 띄우지 않고도 스프링 MVC (DispatcherServlet)가 요청을 처리하는 과정을 확인할 수 있기 때문에 컨트롤러 테스트용으로 자주 쓰임

테스트 할 것

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

Event 생성 API 테스트 코드 작성

package me.freelife.rest.events;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.hateoas.MediaTypes;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;

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_UTF8) //요청타입
                    .accept(MediaTypes.HAL_JSON)) //받고싶은 타입
                .andExpect(status().isCreated());
    }

}
728x90

댓글

💲 추천 글