memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

1. REST API 테스트

Rest API를 테스트할 때는 @WebMvcTest 어노테이션을 사용한다.

 

MockMvc를 생성할때는 MockMvcBuilders를 사용하여 생성한다.

  • 다른 방법으로 MockMvcBuilders를 사용하지 않고, MockMvc에 @Autowired를 사용하여 자동으로 생성하여 주입할 수 있다.
<java />
@ExtendWith(SpringExtension.class) @WebMvcTest(MemberController.class) @DisplayName("MemberController 테스트") class MemberControllerTest { private MockMvc mvc; @MockBean private MemberService memberService; @BeforeEach public void setUp() { mvc = MockMvcBuilders.standaloneSetup(new MemberController(memberService)) .addFilters(new CharacterEncodingFilter("UTF-8", true)) // utf-8 필터 추가 .build(); } // ... 중략 ... }

 

1.1. 테스트 코드 작성

jsonPath()를 사용하여 Response로 넘어온 데이터를 JSON 형태로 파싱 하여 바로 값을 가져올 수 있다. 

<java />
// ...중략... import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.filter.CharacterEncodingFilter; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(SpringExtension.class) @WebMvcTest(MemberController.class) @DisplayName("MemberController 테스트") class MemberControllerTest { private MockMvc mvc; @MockBean private MemberService memberService; @BeforeEach public void setUp() { mvc = MockMvcBuilders.standaloneSetup(new MemberController(memberService)) .addFilters(new CharacterEncodingFilter("UTF-8", true)) // utf-8 필터 추가 .build(); } @Test @DisplayName("회원가입 테스트") void insertMemberTest() throws Exception { // given final LocalDateTime now = LocalDateTime.now(); given(memberService.insertMember(any())) .willReturn( Member.builder() .id(1L) .email("test@gmail.com") .password("1234") .name("Test User") .phone("010-1234-5678") .address("서울") .isActive(true) .registerAt(now) .passwordUpdatedAt(now) .build()); // when final ResultActions actions = mvc.perform( post("/rest/api/v1/member") .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON) .characterEncoding("UTF-8") .content( "{" + " \"email\" : \"test@gmail.com\", " + " \"password\" : \"1234\", " + " \"name\": \"Test User\", " + " \"phone\": \"010-1234-5678\", " + " \"address\": \"서울\" " + "}")); // then actions .andExpect(status().isCreated()) .andExpect(jsonPath("email").value("test@gmail.com")) .andExpect(jsonPath("name").value("Test User")) .andExpect(jsonPath("phone").value("010-1234-5678")) .andExpect(jsonPath("address").value("서울")); } }

테스트 성공


2. 다른 글

2021/01/06 - [Spring/Spring Boot] - SpringBoot, Junit5에서 JPA Repository 테스트

 

SpringBoot, Junit5에서 JPA Repository 테스트

사전 준비 테스트를 위해, Entitiy와 Repository를 생성한다. Entity 생성 Role.java @Entity @Table(name = "role") @Getter @Builder @NoArgsConstructor @AllArgsConstructor(access = AccessLevel.PROTECTED)..

memostack.tistory.com

2021/01/13 - [Spring/Spring Boot] - SpringBoot, Junit5에서 Service 테스트

 

SpringBoot, Junit5에서 JPA Service 테스트

서비스 작성 MemberService.java 생성자 주입을 통해, MemberRepository 와 BCryptPasswordEncoder 를 주입한다. BCryptPasswordEncoder 는 시큐리티에 Bean 을 생성했다. (아래 펼쳐서 확인) 더보기 @Configurati..

memostack.tistory.com

 

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!