1. 학습목표
테스트코드에 대해 이해할 수 있다.
2.필요 개념 문장정리
3. 코드작성
package me.ggambo.springbootdeveloper;
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.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
@SpringBootTest // 빈을 찾고 테스용 어플리케이션 컨텍스트를 만든다.
@AutoConfigureMockMvc // 어플리케이션 서버에 배포하지 않고 테스트용 MVC환경 제공, 컨트롤러 테스트
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 getAllMember() throws Exception {
// given 멤버를 저장
final String url = "/test";
Member savedMember = memberRepository.save(new Member(1L,"홍길동"));
// when 멤버 리스트를 조회하는 API를 호출
final ResultActions result = mockMvc.perform(get(url) // 요청전송
.accept(MediaType.APPLICATION_JSON)); // JSON타입으로 전송
// then 응답 코드 200 OK, 반환값 중 0번째 id와 name 값과 같은지 확인
result
.andExpect(status().isOk()) //
.andExpect(jsonPath("$[0].id").value(savedMember.getId()))
.andExpect(jsonPath("$[0].name").value(savedMember.getName()));
}
}
4.마무리
Given-When-Then패턴을 이해하고 테스트코드를 경험해볼 수 있었다.
'SPRING > Spring' 카테고리의 다른 글
[스프링| 스프링 입문 | 코드로 배우는 스프링] 비즈니스 요구사항 정리 (0) | 2024.04.23 |
---|---|
[스프링| 스프링 입문 | 코드로 배우는 스프링] API (0) | 2024.04.22 |
[스프링| 스프링 입문 | 코드로 배우는 스프링] MVC와 템플릿엔진 (1) | 2024.04.21 |
[되기시리즈 스프링부트3| 03장 스프링부트3 구조 이해하기] (0) | 2024.02.14 |
[되기시리즈 스프링부트3| 02장 스프링부트3 시작하기] IoC/DI, AOP, (0) | 2024.02.14 |