1. Get 테스트하기
특성 속성(Key)의 데이터(value) 존재, 타입 확인
@DisplayName("모든 정보를 조회한다")
@FindWithMockUser
@Test
public void testFindAllInfo() throws Exception {
mockMvc.perform(get(PREFIX)
.headers(headers)) // Token 등 필요한 header 첨부
.andDo(print())
.andExpect(status().isOk()) // 기대 상태값
.andExpect(jsonPath("$.data[0].a").exists()) // 데이터 Value 존재 여부 확인
.andExpect(jsonPath("$.data[0].b").isBoolean()) // 데이터 타입 확인
.andExpect(jsonPath("$.data[0].c").hasJsonPath()); // 데이터 Path(Key) 존재 여부 확인
}
MockHttpServletResponse:
Status = 200
Error message = null
Headers = 생략
Content type = application/json;charset=UTF-8
Body = { ... 생략..., "data":[{"a":"aValue", "b" :"bValue", "c":null},...]}
Forwarded URL = null
Redirected URL = null
Cookies = []
Matchers를 이용한 Response 값 확인
private static final String PREFIX = "/api/v1/...";
private static final String DATE_TIME_REGEX = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}";
@DisplayName("특정 데이터 상세 정보 보기")
@FindWithMockUser
@Test
public void testFindDataDetail() throws Exception {
mockMvc.perform(get(PREFIX + "/" + "생략" + "/detail")
.headers(headers))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.data.dtm").value(matchesPattern(DATE_TIME_REGEX)))
.andExpect(jsonPath("$.data.uList", Matchers.hasSize(Matchers.greaterThan(0))))
}
MockHttpServletResponse:
Status = 200
Error message = null
Headers = 생략
Content type = application/json;charset=UTF-8
Body = { ... 생략..., "data":{"dtm":"2024-08-16 19:00:00", "uList":[{"ZA":"ZAValue","ZB":"ZBValue","ZCValue":null},{"ZA":"ZAValue","ZB":"ZBValue","ZC":null},...]}
Forwarded URL = null
Redirected URL = null
Cookies = []
2. Get이외의 테스트
privat static final UUID TEST_ID = "생략";
@DisplayName("습득(주웠어요) 채팅을 생성한다")
@FindWithMockUser(username = "3ee5f0fb-1f93-48e6-a5cd-ebeeee3d5eaa")
@Transactional
@Test
public void testCreateFundChat() throws Exception {
// given
UUID id = TEST_ID;
TestInput input = new TestInput();
input.setId(id);
// when-then
mockMvc.perform(post(PREFIX + "/test") // post Mapping
.contentType(MediaType.APPLICATION_JSON) // contentType 지정
.content(objectMapper.writeValueAsString(input))) // Input 객체 삽입
.andDo(print())
// ... 생략
}
contentType, content 필요에 따라 맞게 삽입