[DEV] J-Jay

스프링 부트 테스트 코드 (3) 본문

Back-end/Spring

스프링 부트 테스트 코드 (3)

J-Jay 2023. 9. 2. 23:01
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이 저장된 값과 같은지 확인한다
  1. perform(): 요청을 전송하는 역할을 하는 메서드이다.
    결과로 ResultActions 객체를 받으며, RsultActions 객체는 반환값을 검증하고 확인하는
    andExpect() 메서드를 제공해준다.

  2. accept(): 요청을 보낼 때 무슨 타입으로 응답을 받을지 결정하는 메서드이다. 
    JSON, XML 등 다양한 타입이 있지만 위의 코드에서는 JSON으로 받는다고 명시하였다.
  3. andExpect(): 응답을 검증하는 메서드이다.
    TestController에서 만든 API는 응답으로 OK(200)을 반환하므로 이에 해당하는 메서드인 isOk를 사용해 응답 코드가 OK(200)인지 확인한다.
  4. 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번대 응답 코드인지 검

TestControllerTest  결과

'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