Book/Spring boot 와 AWS로 혼자 구현하는 웹서비스

[Book] 4) HelloController 생성과 테스트를 해보자!

kkkkkkkkkkkk 2022. 3. 27. 18:21

👻  메인 클래스를 살펴봅시다.

@SpringBootApplication -> 1
public class BoardSpringbootWebserviceApplication{
    public static void main(String[]args) {
        SpringApplication.run(BoardSpringbootWebserviceApplication.class, args);
    }
}

  1. @SpringBootApplication 으로 인해 스프링 부트의 자동 설정과 스프링이 관리하는 Bean 읽기와 생성을 모두 자동으로 설정됩니다.

주의 : @SpringBootApplication 이 있는 위치부터 설정을 읽어가기 때문에 이클래스는 항상 프로젝트의 최상단에 위치해야만 합니다.

main method 에서 실행하는 SpringApplication.run() 으로 인해 내장 WAS 를 실행하게 됩니다.

spring boot는 WAS를 따로 설치하지 않고 내장 WAS 를 이용하기 때문에 언제 어디서나 같은 환경에서 스프링 부트를 배포할 수 있습니다.

👻  Json을 반환하는 RestController 를 생성해봅시다.

@RestController -> 1
public class HelloController{

    @GetMapping("/hello") -> 2
    public String hello() {
        return "hello";
    }
}
  1. json 을 반환하는 컨트롤러로 만들어 줍니다.
  2. http method 인 get의 요청을 받을 수 있는 api를 만들어 줍니다.

hello 를 리턴하는 기능을 만들었으니 테스트 코드를 작성을 해야겠죠??

👻  테스트 코드를 작성해보자

@WebMvcTest(controllers = HelloController.class) -> 1
class HelloControllerTest{

    @Autowired -> 2
    private MockMvc mvc; -> 3

    @Test -> 4
    @DisplayName("hello_반환되다") -> 5
    void hello() throws Exception{
        // given
        String hello = "hello";

        // when && then
        mvc.perform(get("/hello")) -> 6
            .andExpect(status().isOk()) -> 7
            .andExpect(content().string(hello)); -> 8
        }
}
  1. web 관련된 클래스들의 테스트를 하기 위한 에노테이션 입니다. @Controller, @ControllerAdvice 등 에사용하고 @Service 나 @Repository 에는 사용 할 수 없습니다.
  2. @Autowired 는 스프링이 관리하는 Bean 을 주입하게 해줍니다.
  3. 웹 api 를 테스트 할 때 사용하고 http의 method 인 get, post 등을 테스트 할 수 있습니다.
  4. 테스트 코드를 사용 할 때 @Test 를 붙여줍니다.
  5. 테스트 코드의 메서드 이름을 지어 줄 수 있습니다.
  6. MockMvc 를 통해 http get 요청을 합니다. 체이닝이 지원되어 여러 기능을 이어서 선언할 수 있습니다.
  7. mvc.get(”/hello”) 의 결과를 검증하고 status 가 isok 인지 검증합니다.
  8. mvc.get(”/hello”) 의 결과를 검증하고 응답 본문의 내용을 검증합니다. 반환 값이 “hello” 이므로 “hello” 가 맞는지 검증합니다.