상똥이의 Back-End 공부방
[Board Project] 11. API 테스트 정의 본문
[1. API환경 테스트]
1. 환경 준비
(1) test/java/프젝 경로에 controller.package생성 후, 안에 DataRestTest.class 생성
(2) 클래스 전체에 @SpringBootTest, @AutoConfigureMockMvc 삽입
- 웹과의 상호작용을 위해 MVC를 사용해야하지만, @WebMvcTest를 사용하면 slice test를 하기 때문에 컨트롤러 외의 빈은 로드하지 않고 최소한의 내용만 가져오기 때문에 AutoConfiguration만 가져온다.
(3) @DisplayName("Data Rest 테스트")
(3) 생성자 방식으로 아래와 같이 작성
private final Mvc mvc;
public DataRestTest(@Autowired MockMvc mvc){
this.mvc=mvc;
}
2. 게시글 리스트 조회 테스트 생성
(1) @DisplayName("[ api] 게시글 리스트 조회"), @Test삽입하여 테스트 void 생성
(2) mvc를 이용해 게시글 리스트를 가져오는 get 기능을 사용한다
- 이때, get메소드를 사용하기 위해서 ctrl+spacebar를 눌러 MockMvc
RequestBuilders.get 메소드가 뜬다
- 그럼 alt+Enter를 눌러 import statically를 선택한다. (코드를 간결히 하기 위해)
(3) get메서드에 "/api/articles"를 작성하여 게시글을 선택한다
(4) andExpect를 사용하여 연결상태가 좋은지, hal+json타입의 글을 조회할 수 있는지 확인한다
- andExpect는 주로 MVC에서 사용한다. 웹 요청에 대한 응답을 위해 사용하며 그 속성을 검사할 때 사용한다.
테스트 코드 (접은 글)
package com.fastcampus.projectboard.controller;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.transaction.annotation.Transactional;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@DisplayName("Data REST 테스트")
@Transactional
@AutoConfigureMockMvc
@SpringBootTest
public class DataRestTest {
private final MockMvc mvc;
public DataRestTest(@Autowired MockMvc mvc) {
this.mvc = mvc;
}
@DisplayName("[api] 게시글 리스트 조회")
@Test
void givenNothing_whenRequestingArticles_thenReturnsArticlesJsonResponse() throws Exception {
mvc.perform(get("/api/articles"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.valueOf("application/hal+json")));
}
}
2. 게시글 단건 조회 테스트 생성
코드 (접은 글)
@DisplayName("[api] 게시글 단건 조회")
@Test
void givenNothing_whenRequestingArticle_thenReturnsArticleJsonResponse() throws Exception {
mvc.perform(get("/api/articles/1"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.valueOf("application/hal+json")));
}
3. 게시글에 달른 댓글 리스트 조회 테스트
코드 (접은 글)
@DisplayName("[api] 게시글 -> 댓글 리스트 조회")
@Test
void givenNothing_whenRequestingArticleCommentsFromArticle_thenReturnsArticleCommentsJsonResponse() throws Exception {
mvc.perform(get("/api/articles/1/articleComments"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.valueOf("application/hal+json")));
}
4. 댓글 리스트 조회 테스트
코드 (접은 글)
@DisplayName("[api] 댓글 단건 조회")
@Test void givenNothing_whenRequestingArticleComment_thenReturnsArticleCommentJsonResponse() throws Exception {
mvc.perform(get("/api/articleComments/1"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.valueOf("application/hal+json")));
}
'프로젝트 > 게시판 만들기' 카테고리의 다른 글
[Board Project] 13. 뷰 엔드포인트 테스트 정의 (0) | 2023.10.23 |
---|---|
[Board Project] 12. API 구현 (Query DSL, Spring data, JPA) (0) | 2023.10.21 |
[Board Project] 10. API 탐색 - 조회 위주 (HAL Explorer, Rest Repositories) (0) | 2023.10.15 |
[Board Project] 9. 데이터베이스 접근 로직 구현 (0) | 2023.10.12 |
[Board Project] 8. 메타데이터 공동 필드 추출하기 (0) | 2023.10.11 |