// given 준비
// when 실행
// then 검증
@BeforeAll -> static 만 가능. 한번만 되는거라 전역을 선언하여 추가된 값 등이 지워지지 않음.
@BeforeEach -> test 마다 재실행하여 입력값 초기화.
@AfterEach -> test 끝날때마다 한번씩 실행.
@AfterAll -> 모든 test 끝나고 딱 한번 실행.
작성한 예시 코드 ( post patch get get(s) delete)
package com.springboot.homework;
import com.springboot.member.dto.MemberDto;
import com.google.gson.Gson;
import com.springboot.member.entity.Member;
import com.springboot.member.service.MemberService;
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.test.web.servlet.ResultActions;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.util.UriComponentsBuilder;
import java.net.URI;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.startsWith;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@Transactional
@SpringBootTest
@AutoConfigureMockMvc
public class MemberControllerHomeworkTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private Gson gson;
@Test
void postMemberTest() throws Exception {
// given
MemberDto.Post post = new MemberDto.Post("hgd@gmail.com",
"홍길동",
"010-1234-5678");
String content = gson.toJson(post);
// when
ResultActions actions =
mockMvc.perform(
post("/v11/members")
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON)
.content(content)
);
// then
actions
.andExpect(status().isCreated())
.andExpect(header().string("Location", is(startsWith("/v11/members/"))));
}
@Test
void patchMemberTest() throws Exception {
// given
MemberDto.Post post = new MemberDto.Post("hgd@gmail.com",
"홍길동",
"010-1234-5678");
String postContent = gson.toJson(post);
ResultActions postActions =
mockMvc.perform(
post("/v11/members")
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON)
.content(postContent)
);
String location = postActions.andReturn().getResponse().getHeader("Location");
URI uri = UriComponentsBuilder.newInstance().path(location).build().toUri();
MemberDto.Patch patch = new MemberDto.Patch("010-9999-8888", "박옥춘");
String patchContent = gson.toJson(patch);
// when
ResultActions patchActions =
mockMvc.perform(
patch(uri)
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON)
.content(patchContent)
);
// then
patchActions.andExpect(status().isOk())
.andExpect(jsonPath("$.data.name").value(patch.getName()))
.andExpect(jsonPath("$.data.phone").value(patch.getPhone()));
}
@Test
void getMemberTest() throws Exception {
// given: MemberController의 getMember()를 테스트하기 위해서 postMember()를 이용해 테스트 데이터를 생성 후, DB에 저장
MemberDto.Post post = new MemberDto.Post("hgd@gmail.com","홍길동","010-1111-1111");
String postContent = gson.toJson(post);
ResultActions postActions =
mockMvc.perform(
post("/v11/members")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.content(postContent)
);
long memberId;
String location = postActions.andReturn().getResponse().getHeader("Location"); // "/v11/members/1"
memberId = Long.parseLong(location.substring(location.lastIndexOf("/") + 1));
// when / then
mockMvc.perform(get("/v11/members/" + memberId)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.data.email").value(post.getEmail()))
.andExpect(jsonPath("$.data.name").value(post.getName()))
.andExpect(jsonPath("$.data.phone").value(post.getPhone()));
}
@Test
void getMembersTest() throws Exception {
// TODO MemberController의 getMembers() 핸들러 메서드를 테스트하는 테스트 케이스를 여기에 작성하세요.
// given
MemberDto.Post post1 = new MemberDto.Post("tlsalswns@naver.com", "신민아", "010-5151-1515");
MemberDto.Post post2 = new MemberDto.Post("dmsgksmf@naver.com", "김하늘", "010-9898-7878");
String content1 = gson.toJson(post1);
String content2 = gson.toJson(post2);
mockMvc.perform(
post("/v11/members")
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON)
.content(content1)
);
mockMvc.perform(
post("/v11/members")
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON)
.content(content2)
);
// when / then
URI getUri = UriComponentsBuilder.newInstance().path("/v11/members").build().toUri();
MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
multiValueMap.add("page", "1");
multiValueMap.add("size", "10");
mockMvc.perform(get(getUri)
.params(multiValueMap)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.data[0].email").value(post2.getEmail()))
.andExpect(jsonPath("$.data[0].name").value(post2.getName()))
.andExpect(jsonPath("$.data[0].phone").value(post2.getPhone()))
.andExpect(jsonPath("$.data[1].email").value(post1.getEmail()))
.andExpect(jsonPath("$.data[1].name").value(post1.getName()))
.andExpect(jsonPath("$.data[1].phone").value(post1.getPhone()));
}
@Test
void deleteMemberTest() throws Exception {
// TODO MemberController의 deleteMember() 핸들러 메서드를 테스트하는 테스트 케이스를 여기에 작성하세요.
MemberDto.Post post = new MemberDto.Post("hgd@gmail.com",
"홍길동",
"010-1234-5678");
String content = gson.toJson(post);
// when
ResultActions actions =
mockMvc.perform(
post("/v11/members")
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON)
.content(content)
);
String location = actions.andReturn().getResponse().getHeader("Location");
URI uri = UriComponentsBuilder.newInstance().path(location).build().toUri();
// then
mockMvc.perform(delete(uri))
.andExpect(status().isNoContent());
}
}
'코딩공부' 카테고리의 다른 글
| 240723 코딩테스트 오류(초기값 설정 - 최소값/최대값) (4) | 2024.07.23 |
|---|---|
| Spring Security 인증 처리 흐름 (0) | 2024.07.05 |
| Spring MVC 동작 방식과 구성요소 (0) | 2024.06.10 |
| Java Spring - AOP 핵심개념 (0) | 2024.06.10 |
| HTTP 상태코드 정리 (0) | 2024.05.31 |