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 담겨 있는지 확인
- id는 DB에 들어갈 때 자동생성된 값으로 나오는지 확인
- 입력값으로 누가 id나 eventStatus, offline, free 이런 데이터까지 같이 주면?
- Bad_Request로 응답 vs 받기로 한 값 이외는 무시
- 입력 데이터가 이상한 경우 Bad_Request로 응답
- 입력값이 이상한 경우 에러
- 비즈니스 로직으로 검사할 수 있는 에러
- 에러 응답 메시지에 에러에 대한 정보가 있어야 한다
- 비즈니스 로직 적용 됐는지 응답 메시지 확인
- offline과 free 값 확인
- 응답에 HATEOA와 profile 관련 링크가 있는지 확인
- 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
'개발강의정리 > Spring' 카테고리의 다른 글
[스프링 기반 REST API 개발] 2-3. Event 생성 API 구현: EventRepository 구현 (0) | 2019.12.28 |
---|---|
[스프링 기반 REST API 개발] 2-2. Event 생성 API 구현: 201 응답 받기 (0) | 2019.12.28 |
[스프링 기반 REST API 개발] 1-6. 이벤트 비지니스 로직 (0) | 2019.12.27 |
[스프링 기반 REST API 개발] 1-5. 이벤트 도메인 구현 (0) | 2019.12.27 |
[스프링 기반 REST API 개발] 1-4. 스프링 부트 프로젝트 만들기 (0) | 2019.12.27 |
댓글