본문 바로가기
Spring/Spring Boot

[Spring Boot] Controller, ControllerTest

by seoyamin 2022. 8. 29.

[교재]  스프링 부트와 AWS로 혼자 구현하는 웹 서비스

 

1. Controller 

1-1. 폴더 구조

 

 

1-2. Application.java

프로젝트의 메인 클래스로, 항상 프로젝트 패키지의 최상단에 위치해야 한다.

 

package com.springboot.seoyamin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

 

💡 SpringApplication.run을 통해 내장 WAS (Web Application Server) 실행됨

     [장점 1]  톰캣을 설치할 필요 없음

     [장점 2]  언제 어디서나 동일한 환경에서 spring boot 배포 가능

 

 

 

1-3.  HelloController.java

간단한 api로, @GetMapping을 통해 HTTP 메소드인 get의 요청을 받을 수 있는 api를 만든 것이다.

/hello로 request가 오면, 문자열 "hello"를 리턴한다.

 

package com.springboot.seoyamin.web;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}

 

 


 

2. Controller Test

2-1. 폴더 구조

 

 

2-2.  HelloControllerTest.java

보통 테스트 코드는 [테스트 대상 클래스명] + Test 의 이름을 붙인다.

 

package com.springboot.seoyamin.web;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;


@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void hello가_리턴된다() throws Exception {
        String hello = "hello";

        mvc.perform(get("/hello"))
                .andExpect(status().isOk())
                .andExpect(content().string(hello));
    }
}

 

💡 private MocMvc mvc

      - 웹 api를 테스트할 때 사용됨

      - 스프링 MVC 테스트의 시작점

      - 해당 클래스를 이용하여 HTTP의 GET, POST 등에 대하여 api 테스트를 할 수 있다.

      - mvc.perform(get("/hello"))  :  MocMvc를 이용해서 /hello 주소로 HTTP GET 요청 보냄

 

💡 .andExpect( )

      - mvc.perfom의 결과를 검증하는 역할

      - .andExpect(status().isOk())  :  HTTP Header의 status를 검증

      - .andExpect(content().string(hello))  :  Controller에서 리턴한 이 hello인지 검증