🌼슬라이스 테스트
각 계층에 구현해 놓은 기능들이 잘 동작하는지 특정 계층만 잘라서(Slice) 테스트 하는 것
🌟API 계층 테스트
API계층의 테스트 대상은 클라이언트의 요청을 받아들이는 Controller
@Transactional
@SpringBootTest
@AutoConfigureMockMvc
public class ControllerTestDefaultStructure {
@Autowired
private MockMvc mockMvc;
@Test
public void postMemberTest() {
//given 테스트용 request body 생성
//when MockMvc 객체로 요청 URI,HTTP 메서드등 지정 후 대상 Controller 호출
//then Controller Controller에서 응답으로 수신한 HTTP Status 및 response body 검증
}
}
@SpirngBootTest
Spring Boot기반의 애플리케이션을 테스트 하기 위한 Application Context생성
통합테스트에 적합
@AutoConfigureMockMvc
테스트를 위한 애플리케이션의 자동구성작업을 해줌
MockMvc
Tomcat같은 서버를 실행하지 않고 Spring 기반 애플리케이션 테스트를 하게 환경을 지원해주는 Spring MVC 테스트 프레임워크
@AutoConfigureMockMvc 을 꼭 달아줘야함
@Transactional
자동초기화
1.Given
request body에 포함시키는 요청데이터와 동일한 역할
JSON 포맷으로 request body에 포함
✔Gson 라이브러리를 사용하려면
build.gradle 에 추가해야함
implementation 'com.google.code.gson:gson'
2.When
perform()
ResultActions타입의 객체를 리턴하는데 이 객체를 이용해서 request에 대한 검증을 수행할 수있음
메서드에 요청을 전송하려면 먼저 호출해야함
Http Method, request URL, path variable 을 위한 API메서드
MockMvcRequestBuilders - GET,POST,PUT,DELETE 요청방식과 매핑되는 get(),post(),put(),delete() 메소드 제공
request body를 위한 API메서드
content(...)
query parameter
params(...)
response body 검증
andExpect(jsonPath("$.data.~~").value(...))
3.Then
response body(JSON)형식의 각 프로퍼티 값을 검증
🌟데이터 액세스 계층 테스트
DB의상태를 테스트 케이스 실행 이전으로 되돌려서 깨끗하게 만들어야함
-> 각각의 테스트 케이스에 독립성이 보장되어야 함
🍀테스트 클래스 구조
@DataJpaTest
public class RepositoryTestDefaultStructure {
⠀
@Autowired
private MemberRepository memberRepository;
⠀
@Test
public void saveMemberTest() {
// 테스트하고자 하는 Controller 핸들러 메서드의 테스트 케이스 작성
⠀
// given
// 테스트용 데이터 준비 ( 객체에 데이터 저장 )
⠀
// when
// Repository에 객체 저장
// 정보들 중 하나만 뽑아 검증하고 싶다면 Repository의 findByXXX() 메서드 사용
⠀
// then
// 정보가 잘 저장되었는지 검증 (Assertion)
}
}
@DataJpaTest
데이터 액세스 계층을 테스트하기위한 가장 핵심적인 방법
@Transactional 애너테이션을 포함하고 있어서 종료되는 시점에 rollback처리 됨
'개발공부🌷 > Spring MVC' 카테고리의 다른 글
Spring MVC Spring Rest Docs (2) | 2023.12.08 |
---|---|
Spring MVC 테스팅(Testing)3 (0) | 2023.12.07 |
Spring MVC 테스팅(Testing) (0) | 2023.12.06 |
Spring MVC 트랜잭션(Transaction) (0) | 2023.12.05 |
Spring MVC JPA 2 (0) | 2023.11.28 |