일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 금감원 백내장 민원
- 해시
- 코드 스테이츠 백엔드 교육과정
- Code States 백엔드 합격 후기
- 백내장
- 자바
- 코드스테이츠 백엔드 부트캠프 합격
- 코드스테이츠 부트캠프
- 금융감독원 민원신청
- CodeState 후기
- 백준 알고리즘
- 메서드
- 백내장 다초점렌즈 삽입술
- 코드스테이츠 합격 후기
- 금감원
- Gamsgo
- 금융감독원
- 보험금 지급거절
- 백내장 금감원
- 코드스테이츠 백엔드 후기
- codestates 국비지원 1기 합격 후기
- 코드스테이츠 합격
- 코테 합격후기
- Java
- 코드스테이츠 부트캠프 합격 후기
- 겜스고
- 에이치엘비
- 코드스테이츠 백엔드 교육과정
- HLB
- Spring
Archives
- Today
- Total
개발하는 동그리
[Test] Slice Test (API 계층) 본문
반응형
API 계층 테스트 기본 구조
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.test.web.servlet.MockMvc;
@SpringBootTest // (1)spring boot 기반의 애플리케이션 테스트를 위한 application context 생성
// -> Application Context는 애플리케이션에 필요한 Bean 객체가 등록되어 있다.
@AutoConfigureMockMvc // (2)테스트에 필요한 애플리케이션의 구성이 자동 진행, MockMvc 같은 기능 사용에 필요
public class ControllerTestDefaultStructure {
// (3) DI로 주입받은 MovkMvc는 Tomcat 같은 서버를 실행하지 않고 Spring기반의 애플리케이션을
// 테스트 할 수 있는환경을 제공하는 Spring MVC 테스트 프레임 워크
// MocvMvc 객체를 통해 우리가 작성한 Controller를 호출하고 테스트를 진행할 수 있다.
@Autowired
private MockMvc mockMvc;
@Test
public void postMemberTest() {
// given
//(4) 테스트용 request body 생성
// when
//(5) MockMvc 객체를 통해 요청 URL, HTTP 메서드등을 지정하고, request body에 추가한 뒤
// request 수행 / 테스트 대상 Controller 호출
// then
//(6) Controller 핸들러 메서드에서 응답으로 수신한 HTTP Status 및 response body 검증
}
}
API 계층 테스트 세부 구조 (예시 포함)
import com.codestates.member.dto.MemberDto;
import com.google.gson.Gson;
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.MvcResult;
import org.springframework.test.web.servlet.ResultActions;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@SpringBootTest
@AutoConfigureMockMvc
class MemberControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private Gson gson;
@Test
void postMemberTest() throws Exception {
// given
// (1) request body에 포함시키는 요청데이터
MemberDto.Post post = new MemberDto.Post("moodaery@gmail.com",
"춘식",
"010-1234-5678");
// (2) json 포멧으로 변환
String content = gson.toJson(post);
// when
ResultActions actions =
// (3) perform() 메서드를 통해 Controll 호출의 세부적 정보 포함
mockMvc.perform(
// (4) HTTP METHOD와 request URL 정보
post("/members")
// (5) return 받을 응답 데이터 type 설정
.accept(MediaType.APPLICATION_JSON)
// (6) 메서드를 통해 서버에서 처리 가능한 Content Type 설정
.contentType(MediaType.APPLICATION_JSON)
// (7) request body 데이터 설정
.content(content)
);
// then
// (8) 위 perform() 메서드는 ResultActions 타입의 객체를 리턴
MvcResult result = actions
// (9) andExpect() 메서드를 통해 파라미터로 입력한 Macher로 예상되는 기대 결과를 검증
.andExpect(status().isCreated())
// (10) jsonPath를 통해서 json 형식의 개별 프로퍼티에 쉽게 접근가능
.andExpect(jsonPath("$.data.email").value(post.getEmail()))
// 대부분의 검증은 여기까지 마무리..
// (11) andReturn() 을 통해서 response 데이터 확인을 할 수 있으며, 디버깅 용도로 출력할 수 있다
.andReturn();
// System.out.println(result.getResponse().getContentAsString());
}
}
반응형
'IT 정보 > Spring' 카테고리의 다른 글
OSI 7계층 / CIA / RSA / RFC 규칙 / JWT (4) | 2022.08.29 |
---|---|
[Test] Slice Test (Data Access 계층) (2) | 2022.08.18 |
[Spring] application.yml 설정 (1) | 2022.08.18 |
[Spring] build.gradle 설정 (0) | 2022.08.18 |
[인증\보안] Spring Security 기본 (인증/ 인가) (3) | 2022.08.02 |