Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 로그인/로그아웃
- spring
- 프레젠테이션 계층
- http
- 스프링부트 구조
- IPC
- 스프링 부트 테스트
- RESTfull API
- 스프링부트 계층구조
- 비동기
- 로그인 인증 흐름
- @temproal
- ORM
- JWT
- 비즈니스 계층
- 작업명중복
- ./gradlew docker
- 퍼시스턴스 계층
- Java
- 어노테이션
- 토큰기반 인증
- 동기
- 스프링
- formmatted
- 세션기반 인증
- ./gr
- 스프링부트
- JPA
- java I/O
- MSA
Archives
- Today
- Total
[DEV] J-Jay
스프링 부트 테스트 코드 (3) 본문
728x90
테스트 코드 작성
@SpringBootTest //테스트용 애플리케이션 컨텍스트 생성
@AutoConfigureMockMvc // MockMvc 생성
class TestControllerTest {
@Autowired
protected MockMvc mockMvc;
@Autowired
private WebApplicationContext context;
@Autowired
private MemberRepository memberRepository;
@BeforeEach //테스트 실행 전 실행하는 메서드
public void mockMvcSetUp() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
}
@AfterEach //테스트 실행 후 실행하는 메서드
public void cleanUp() {
memberRepository.deleteAll();
}
}
@SpringBootTest
@SpringBootTest 어노테이션은 메인 애플리케이션 클래스에 추가하는 어노테이션은 @SpringBootApplication이 있는
클래스를 찾고 그 클래스에 포함되어 있는 빈을 찾은 후 테스트용 애플리케이션 컨텍스트를 만든다.
@AutoConfigureMockMvc
@AutoConfigureMockMvc는 MockMvc를 생성하고 자동으로 구성하는 어노테이션이다.
MockMvc는 어플리케이션을 서버에 배포하지 않고도 테스트용 MVC 환경을 만들어 요청 및 전송, 응답 기능을 제공하는 유틸리티 클래스이다. 즉, 컨트롤러를 테스트할 때 사용되는 클래스이다.
@BeforeEach
테스트를 실행하기 전, 실행하는 메서드에 적용하는 어노테이션이다.
위 코드에서는 MockMvcSetUp() 메서드를 실행해 MockMvc를 설정해준다.
@AfterEach
테스트를 실행한 이후에 실행하는 메서드에 적용하는 어노테이션이다.
위 코드에서는 cleanUp() 메서드를 실행해 member 테이블에 있는 데이터들을 모두 삭제한다.
@SpringBootTest //테스트용 애플리케이션 컨텍스트 생성
@AutoConfigureMockMvc // MockMvc 생성
class TestControllerTest {
@Autowired
protected MockMvc mockMvc;
@Autowired
private WebApplicationContext context;
@Autowired
private MemberRepository memberRepository;
@BeforeEach //테스트 실행 전 실행하는 메서드
public void mockMvcSetUp() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
}
@AfterEach //테스트 실행 후 실행하는 메서드
public void cleanUp() {
memberRepository.deleteAll();
}
@DisplayName("getAllMembers : 조회 성공")
@Test
public void getAllMembers() throws Exception {
//given
final String url = "/test";
Member savedMember = memberRepository.save(new Member(1L, "J-Jay"));
//when
final ResultActions result = mockMvc.perform(get(url) //1
.accept(MediaType.APPLICATION_JSON)); //2
//then
result.andExpect(status().isOk()) // 3
//4
.andExpect(jsonPath("$[0].id").value(savedMember.getId()))
.andExpect(jsonPath("$[0].name").value(savedMember.getName()));
}
}
Given | 멤버를 저장한다. |
When | 멤버 리스트를 조회하는 API 호출한다. |
Then | 응답 코드가 200 OK 이고, 반환 받은 값의 0번째 요서에 id와 Name이 저장된 값과 같은지 확인한다 |
- perform(): 요청을 전송하는 역할을 하는 메서드이다.
결과로 ResultActions 객체를 받으며, RsultActions 객체는 반환값을 검증하고 확인하는
andExpect() 메서드를 제공해준다. - accept(): 요청을 보낼 때 무슨 타입으로 응답을 받을지 결정하는 메서드이다.
JSON, XML 등 다양한 타입이 있지만 위의 코드에서는 JSON으로 받는다고 명시하였다. - andExpect(): 응답을 검증하는 메서드이다.
TestController에서 만든 API는 응답으로 OK(200)을 반환하므로 이에 해당하는 메서드인 isOk를 사용해 응답 코드가 OK(200)인지 확인한다. - jsonPath("$[0].${필드명}"): JSON 응답값의 값을 가져오는 역할을 하는 메서드이다.
0번째 배열에 들어있는 객체의 id, name값을 가져오고, 저장된 값과 같은지 확인한다.
참고: HTTP 주요 응답코드
코드 | 매핑 메서드 | 내용 |
200 OK | isOk() | HTTP 응답 코드가 200 OK인지 검증 |
201 Created | isCreated() | HTTP 응답 코드가 201 Created인지 검증 |
400 Bad Request | isBadRequest() | HTTP 응답 코드가 400 Bad Request인지 검증 |
403 Forbidden | isForbidden() | HTTP 응답코드가 403 Forbidden인지 검증 |
404 Not Found | isNotFound() | HTTP 응답코드가 404 Not Found인지 검증 |
400번대 응답코드 | is4xxClientError() | HTTP 응답코드가 400번대 응답 코드인지 검증 |
500 Internal Server Error | isInternalServerError() | HTTP 응답코드가 500 Internal Server Error인지 검증 |
500번대 응답 코드 | is5xxServerError() | HTTP 응답코드가 500번대 응답 코드인지 검 |
'Back-end > Spring' 카테고리의 다른 글
스프링 부트 ORM (2) (0) | 2023.09.03 |
---|---|
스프링 부트 ORM (1) (0) | 2023.09.03 |
스프링 부트 테스트 코드 (2) - AssertJ (0) | 2023.09.02 |
스프링 부트 테스트 코드 (1) - JUnit (0) | 2023.09.02 |
스프링 부트 계층 파악하기 (0) | 2023.09.02 |