Back-end/Spring

[SpringBoot] Controller 만들고 테스트 코드 작성해보기

poppy 2020. 11. 9. 15:05
반응형

먼저, 다음과 같이 폴더구조를 만들어주고 파일을 만들어줍니다!

1. Application

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);
    }
}

@SpringBootApplication - 스프링 부트의 자동 설정, 스프링빈 읽기와 생성을 모두 자동으로 설정됩니다

주의할 점은 @SpringBootApplication이 있는 위치부터 읽어나가기 때문에 이 클래스는 항상 프로젝트의 최상단에 위치해야합니다.

 

2. HelloController

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "hello"; //문자열 hello 반환
    }
}

@RestController - 컨트롤러를 JSON으로 반환하는 컨트롤러로 만들어줍니다.

@Controller와 @ResponseBody를 합쳐놓은 것으로 @RestController를 사용하면 메소드마다 @ResponseBody를 붙여주지 않아도되는 편리함이 있습니다.

@Controller와 @RestController가 어떻게 다른지는 다음 링크를 참조하세요!

wondongho.tistory.com/76

 

SpringFramework RESTful방식의 @RestController 와 @ResponseBody란?

몇달전 본인은 프로젝를 진행하면서  클래스를 하나를 Controller로 두고, Controller클래스 내에 view return하는 메소드, RESTful방식으로 return 하는 메소드를 짬뽕해서 사용했다. 결과적으로 이런방

wondongho.tistory.com

@GetMapping("/hello") - /hello로 요청이 왔을 때 HTTP Method인 Get방식으로 요청을 받을 수 있습니다. 

 

3. HelloControllerTest

@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
    @Autowired
    private MockMvc mockMvc;

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

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

@RunWith(SpringRunner.class) - SpringRunner라는 스프링 실행자 사용

@WebMvcTest(controllers = HelloController.class) - MVC를 위한 테스트, 이 예제에서는 컨트롤러만 사용하기 때문에 이것으로 단위테스트합니다. 테스트의 목적에 따라 쓰는 테스트의 종류가 달라집니다

@WebMvcTest에 대한 자세한 내용은 다음 링크를 참조하세요!

goddaehee.tistory.com/212

 

[스프링부트 (10)] SpringBoot Test(3) - 단위 테스트(@WebMvcTest, @DataJpaTest, @RestClientTest 등)

[스프링부트 (10)] SpringBoot Test(3) - 단위 테스트(@WebMvcTest, @DataJpaTest, @RestClientTest 등) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 스프링 부트 단위 테스트 하기 (@WebMvcTest, @Dat..

goddaehee.tistory.com

@Autowired - 스프링빈을 주입받습니다

private MockMvc mvc; - 스프링MVC테스트의 시작점을 뜻합니다. 테스트 안에서 쓰이는 가짜객체이고, 테스트를 위해 쓰이는 수단입니다

mvc.perform(get("/hello")) - /hello 주소로 HTTP Get을 요청합니다

andExpect(status().isOk()) - HTTP Header의 Status를 검증합니다, isOk로 200인지 아닌지를 검증합니다. 200은 요청이 성공적으로 되었다는 의미입니다.

andExpect(content().string(hello)) - 응답 본문의 내용이 "hello"가 맞는지 검증합니다

 

4. 실행

Application을 실행했을 때 로컬에서 다음과 같이 나타나면 잘 실행된 것 입니다!

 

반응형