API 만들어 보기/게시판 API

[게시글 조회] 컨트롤러 Mock 테스트 1

midcon 2023. 9. 21. 14:32

게시글 조회

스프링 재활도 할 겸 가볍게 게시판을 간단한 테스트까지 겸해서 구현해보려고 한다.

우선 게시글을 조회하는 컨트롤러부터 순서대로 만들어볼 것이다.

그보다 앞서 Hello World 를 출력하는 컨트롤러부터 만들어보자.

 

PostController

@RestController
public class PostController {

    @GetMapping("/posts")
    public String get() {
        return "Hello World";
    }
}

 


PostControllerTest

직접 localhost:8080/posts 로 들어가서 Hello World 를 확인해도 되지만 테스트코드 연습겸 테스트를 작성한다.

컨트롤러 테스트는 통합테스트이므로 Mockito 라는 라이브러리를 이용하여 Mock 을 해보자.

스프링부트에서는 Gradle에 spring-boot-starter-test 가 들어가있으니 Mockito 의존성을 따로 추가하지 않아도 된다.

가독성을 위해 static import 해둔게 있으니 안뜨는 메서드는 코드블럭의 최상단 static import 를 참고

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

@WebMvcTest
class PostControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @DisplayName("/posts 요청시 Hello World 를 출력한다.")
    @Test
    void get() throws Exception {
        mockMvc.perform(
            get("/posts")    
            )
            .andExpect(status().isOk())      
            .andExpect(content().string("Hello World"))    
            .andDo(print());     
    }
}

ㄴ @WebMvcTest

@WebMvcTest 는 컨트롤러 계층만 빠르게 테스트 하기 위한 애노테이션이다.

컨트롤러 계층에 필요한 빈들만 의존성 주입을 해주는데, MockMvc 이 여기서 의존성 주입을 받는다.

ㄴ MockMvcResultHandlers.print()

.andDo(print()) 부분이다. 요청과 결과에 대한 상세 내역을 표시한다.

 

 

테스트는 성공하고 .andDo(print()) 를 추가해서 위 사진같이 요청과 결과의 상세 내역을 표시해준다.

 

 

참고자료)

https://www.inflearn.com/course/%ED%98%B8%EB%8F%8C%EB%A7%A8-%EC%9A%94%EC%A0%88%EB%B3%B5%ED%86%B5-%EA%B0%9C%EB%B0%9C%EC%87%BC

 

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS) - 인프런 | 강의

단순히 애플리케이션 하나를 만드는데 끝나지 않습니다. Spring Boot를 활용한 백엔드부터 Vue.js 모던 프론트엔드 스택을 연동한 서비스 완성 A-Z를 보여드립니다., 🐯이제는 실전이다!🐯이 강의를

www.inflearn.com