일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- BFS
- 시나공
- 백준
- 1과목
- 스프링
- 문제풀이
- SW봉사
- 회고
- softeer
- MYSQL
- java
- programmers
- 소프티어
- kotlin
- 공부일지
- 정보처리산업기사
- 알고리즘
- 백준 알고리즘
- 파이썬
- python
- 백준알고리즘
- 자바
- 프로그래머스
- 데이터베이스
- CJ UNIT
- 코딩교육봉사
- 코틀린
- C++
- SQL
- 코딩봉사
Archives
- Today
- Total
JIE0025
[MockMvc] CategoryControllerTest (1) depth가 0인 카테고리 추가 본문
728x90
package com.FlagHome.backend.v1.category.controller
💻 CategoryControllerTest
MockMvc를 좀더 공부해봐야겠다. 지금은 따라쳐보고 무슨 기능하는지 이해하는 정도...
그래도 연습이 되어서 좋다!
조만간 싹다 지우고 다시 써봐야지
package com.FlagHome.backend.v1.category.controller;
import com.FlagHome.backend.v1.category.dto.CategoryDto;
import com.FlagHome.backend.v1.category.entity.Category;
import com.FlagHome.backend.v1.category.repository.CategoryRepository;
import com.FlagHome.backend.v1.post.entity.Post;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
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.security.test.context.support.WithMockUser;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import javax.transaction.Transactional;
import java.util.List;
import static org.hamcrest.core.Is.is;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
//컨트롤러 테스트 :
//@WebMvcTest는 @Controller, @ControllerAdvice만 사용가능하고, @Repository, @Service는 사용할 수 없어서 이 어노테이션은 사용하지 않는다.
@SpringBootTest // @Service, @Repository를 사용 + JPA 테스트를 위한 어노테이션
@Transactional
@WithMockUser
@AutoConfigureMockMvc // MockMvc를 사용하기 위한 어노테이션
public class CategoryControllerTest {
private final String BASE_URL = "/v1/categories";
@Autowired
private CategoryRepository categoryRepository;
@Autowired
private ObjectMapper objectMapper;
// Java 객체를 JSON으로 serialization || JSON 컨텐츠를 Java객체로 deserialization
@Autowired
private WebApplicationContext webApplicationContext;
@Autowired
private MockMvc mockMvc;
@Mock
private Category mockCategory;
@BeforeEach
public void testSetup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
.addFilter(new CharacterEncodingFilter("UTF-8",true))
.build();
}
@Test
@DisplayName("depth가 0인 카테고리 추가 테스트")
void createCategoryDepth0Test() throws Exception {
//given 테스트용 request body 생성
CategoryDto categoryDto = new CategoryDto();
String name = "FLAG";
Long depth = 0L;
categoryDto.setName(name);
categoryDto.setCategoryDepth(depth);
//직렬화 메서드 : JSON타입의 String으로 저장
String jsonBody = objectMapper.writeValueAsString(categoryDto);
// when -> perform : MockMvc 객체로 테스트 대상 Controller 호출
// then -> andExpect부터 : Controller 핸들러 메서드에서 응답으로 수신한 HTTP Status 및 response body 검증
mockMvc.perform(post(BASE_URL) // 넣어준 컨트롤러의 Http Method 와 URL 을 지정
.content(jsonBody) //Body 삽입
.contentType(MediaType.APPLICATION_JSON))
.andDo(print());
List<Category> categoryList = categoryRepository.findAll();
assert categoryList.size() == 1;
Category createdCategory = categoryList.get(0);
assert createdCategory.getId().equals(1L);
assert createdCategory.getName().equals(name);
assert createdCategory.getCategoryDepth().equals(depth);
}
}
✔️ 테스트결과
'백엔드 > 테스트' 카테고리의 다른 글
[Postman][4] Get Categories (컨트롤러 요청메세지 테스트) (0) | 2022.12.19 |
---|---|
[Postman][3] depth가 1~3 인 카테고리 추가 (컨트롤러 요청메세지 테스트) (0) | 2022.12.18 |
[Postman][2] id가 1인 카테고리 수정 (컨트롤러 요청메세지 테스트) (0) | 2022.12.17 |
[JPA] 카테고리 Entity DB 반영 체크 (0) | 2022.12.17 |
[Postman][1] depth가 0인 카테고리 추가 (컨트롤러 요청메세지 테스트) (0) | 2022.12.17 |