스프링 기반 REST API 개발 -백기선님 인프런 강좌를 보고 작성하였습니다.
Event 생성 API
TDD를 위한 테스트 작성
테스트 할것
입력값들을 전달하면 JSON 응답으로 201이 나오는지 확인.
- Location 헤더에 생성된 이벤트를 조회할 수 있는 URI 담겨 있는지 확인.
- id는 DB에 들어갈 때 자동생성된 값으로 나오는지 확인
EventControllerTest 클래스 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34(SpringRunner.class)
//web과 관련된 빈들이 등록 됨
public class EventControllerTests {
MockMvc mockMvc; // 가짜 요청을 만들어 DispatcherServlet 에게 보내고 응답을 확인(웹서버를 띄우진 않음)
ObjectMapper objectMapper; //자동으로 빈으로 등록해줌
public void createEvent(){
Event event = Event.builder()
.name("Spring")
.description("REST API Development with Spring")
.beginEnrollmentDateTime(LocalDateTime.of(2018,11,23,14,22))
.closeEnrollmentDateTime(LocalDateTime.of(2018,11,24,14,22))
.beginEventDateTime(LocalDateTime.of(2018,11,25,14,22))
.endEventDateTime(LocalDateTime.of(2018,11,26,14,22))
.basePrice(100)
.maxPrice(200)
.limitOfEnrollment(100)
.location("강남역 D2 스타텁 팩토리")
.build();
mockMvc.perform(post("/api/events")
.contentType((MediaType).APPLICATION_JSON_UTF8)
.accepot(MediaTypes.HAL_JSON)
.content(objectMapper.writeValueAsString(event)))
.andDo(print())
.andExpect(status().isCreated()
.andExpect(jsonPath("id").exists());
}
}
@WebMvcTest
- MockMvc 빈을 자동 설정
- 웹 관련 빈만 등록.(슬라이스)
MockMvc
- 스프링 MVC 테스트 핵심클래스
- 웹 서버를 띄우지 않고도 스프링 MVC(DispatcherServlet)가 요청을 처리하는 과정을 확인할 수 있기 때문에 컨트롤러 테스트용으로 자주 쓰임
ObjectMapper
- 스프링 부트에 mapping Jackson이 의존성주입이 되있을경우 자동 빈등록
objectMapper.writeValueAsString(event)
- 객체를 JSON으로 변환!
EventController 클래스 작성
1 | "/api/events", produces = MediaTypes.HAL_JSON_UTF8_VALUE ) (value = |
테스트를 진행하면 정상적으로 실행이 된다.