package com.example.springboot3.test;
import com.example.springboot3.MemberRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
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;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
@SpringBootTest // 스프링 컨텍스트를 로드하여 테스트에 사용
@AutoConfigureMockMvc // MockMvc를 사용하기 위해 선언
public 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
- 설명
- 메인 어플리케이션 클래스에 포함된 빈을 찾아 테스트용 애플리케이션 컨텍스트를 생성
- 설명
@AutoConfigureMockMvc
- 설명
- MockMvc 인스턴스를 자동으로 구성함.
- HTTP 요청을 보내고 응답을 검증할 수 있는 테스트 환경을 만듬.
- 설명
테스트 실행 전/후 작업
@BeforeEach
- 설명
- 테스트 실행 전에 특정 작업을 수행하는 메서드에 해당 에너테이션을 적용
테스트 데이터 준비
혹은테스트 환경 설정
에 사용함.
@BeforeEach // 테스트 실행 전 실행하는 메서드 public void mockMvcSetUp() { this.mockMvc = MockMvcBuilders.webAppContextSetup(context) .build(); }
- 설명
@AfterEach
- 설명
- 테스트 실행 후에 특정 작업을 수행하는 메서드에 해당 애너테이션을 적용함.
테스트 데이터 정리
나환경 복원
에 사용
@AfterEach public void cleanUp() { memberRepository.deleteAll(); }
- 설명
실제 테스트
package com.example.springboot3.test;
import com.example.springboot3.Member;
import com.example.springboot3.MemberRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
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.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@SpringBootTest // 스프링 컨텍스트를 로드하여 테스트에 사용
@AutoConfigureMockMvc // MockMvc를 사용하기 위해 선언
public class TestControllerTest {
@Autowired
protected MockMvc mockMvc;
@Autowired
private WebApplicationContext context;
@Autowired
private MemberRepository memberRepository;
@BeforeEach // 테스트 실행 전 실행하는 메서드
public void mockMvcSetUp() {
this.mockMvc = MockMvcBuilders
.webAppContextSetup(context)
.build();
}
@DisplayName(" getAllMembers: 아티클 조회에 성공한다.")
@Test
public void getAllMembers() throws Exception {
// given
final String url = "/test";
Member savedMember = memberRepository.save(new Member(1L, "홍길동"));
// when
final ResultActions result = mockMvc.perform(get(url).accept(MediaType.APPLICATION_JSON));
// then
result
.andExpect(status().isOk())
.andExpect(jsonPath("$[0].id").value(savedMember.getId()))
.andExpect(jsonPath("$[0].name").value(savedMember.getName()));
}
@AfterEach // 테스트 실행 후 실행하는 메서드
public void cleanUp() {
memberRepository.deleteAll();
}
}
- 테스트 시나리오
@DisplayName
- getAllMembers : 아티클 조회에 성공한다.
- 패턴 분석
- Given
- 멤버를 저장
- When
- 멤버 리스트를 조회하는 API를 호출
- Then
- 응답 코드 200 , 반환받은 값중에 0 번쨰 요소의 id 와 name 이 저장된 값과 같은지 확인
- Given
- 코드 설명
mockMvc.perform(get(url)
- MockMvc 를 사용하여 특정 URL 로 GET 요청을 보냅니다.
accept(MediaType.APPLICATION_JSON)
- JSON 형태의 응답을 받기를 기대합니다.
andExpect(status().isOk())
- HTTP 응답 코드가 200 OK인지 확인합니다.
andExpect(jsonPath("$[0].id").value(savedMember.getId()))
- JSON 응답의 0번째 요소의 id 값이 저장된 멤버의 id 값과 일치하는지 확인합니다.
Uploaded by N2T
'자바 > 스프링부트3' 카테고리의 다른 글
[스프링부트3] 테스트 코드 개념 익히기 - JUnit (0) | 2023.10.15 |
---|---|
[스프링부트3] 테스트 코드 개념 익히기 - AssertJ (0) | 2023.10.15 |