블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
REST API 테스트
Rest API를 테스트할 때는 @WebMvcTest
어노테이션을 사용한다.
MockMvc
를 생성할때는 MockMvcBuilders
를 사용하여 생성한다.
- 다른 방법으로
MockMvcBuilders
를 사용하지 않고, MockMvc에@Autowired
를 사용하여 자동으로 생성하여 주입할 수 있다.
@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();
}
// ... 중략 ...
}
테스트 코드 작성
jsonPath()
를 사용하여 Response로 넘어온 데이터를 JSON 형태로 파싱 하여 바로 값을 가져올 수 있다.
// ...중략...
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("서울"));
}
}
다른 글
2021/01/06 - [Spring/Spring Boot] - SpringBoot, Junit5에서 JPA Repository 테스트
2021/01/13 - [Spring/Spring Boot] - SpringBoot, Junit5에서 Service 테스트
반응형
'Backend > Spring Boot' 카테고리의 다른 글
Spring Boot에서 AOP 구현 (Aspect Oriented Programming) (0) | 2021.03.11 |
---|---|
Spring Boot 에서 JWT 적용 (Maven 환경) (0) | 2021.01.21 |
SpringBoot, Junit5에서 Service 테스트 (1) | 2021.01.13 |
SpringBoot, Junit5에서 JPA Repository 테스트 (0) | 2021.01.06 |
Spring Boot, JPA에서 boolean 처리 (@Converter, @Convert 사용) (1) | 2021.01.05 |