본문 바로가기
따라 공부하기/Spring boot 혼자 개발하는 웹 서비스

[Spring Boot]스프링부트에서 테스트 코드 작성하기

by DawIT 2020. 12. 20.
320x100

이 글은 이 책을 바탕으로 쓰여졌습니다.

 

오늘은 Spring Boot에서 테스트 코드 작성하는법을 배웠다.

 

요즘 뜨는 회사중 하나에서는 코딩 테스트에서 알고리즘이 아닌 단위 테스트를 조건으로 두고 있다고 한다.

 

또한 정말 실력있는 프로그래머가 되려면 코드 테스트는 필수이다.

 

내가 읽은 부분에서는 TDD의 첫 단계인 단위 테스트 코드를 작성하는 법이 나와있었다.

 

단위 테스트의 이점으로는, 개발단계 초기에 문제를 발견하도록 도와주고, 나중에 코드를 바꾸었을 때, 기존 기능들이 정상적으로 작동하는지 확인할 수 있다는 점이 있다.

 

테스트 코드의 작성을 도와주는 테스트 프레임워크중 가장 대중적인 것은 xUnit이라고 한다. Java에서는 JUnit, 데이터베이스에서는 DBUnit C++에서는 CppUnit.. 이중 Java를 위한 JUnit의 버전 4를 사용한다.

 

Application.java

 

일단 main 아래에 Application.java를 작성해준다. 이는 앞으로 만들 프로젝트의 메인 클래스가 된다. @SpringBootApplication 어노테이션을 통해 스프링 부트의 여러가지 설정들을 자동으로 처리한다.

 

그리고 이 어노테이션이 있는 부분부터 설정을 읽어 가기 때문에 항상 프로젝트의 최상단에 위치시켜야 한다.

 

SpringApplication.run함수를 통해 내장 WAS(Web Applicaion Server)를 실행시킨다.

 

이제 테스트를 위한 Controller를 만든다.

 

HelloController.java

 

  • @RestController : 이 컨트롤러를 JSON을 반환하는 컨트롤러로 지정
  • @GetMapping : Get을 받을 수 있는 API로 지정

hello() 함수와 이 어노테이션을 통해 이 프로젝트는 /hello의 요청을 받으면 "hello"라는 문자열을 반환하는 기능을 가지게 된다.

 

HelloControllerTest.java

 

HelloController를 만들었으니 이를 테스트 하기 위한 테스트 코드를 작성했다. 테스트 코드를 작성하지 않았다면, 직접 WAS Tomcat을 실행시켜 확인해보아야 한다.

 

  • @RunWith : JUnit의 실행자 외의 다른 실행자(여기서는 Spring)을 실행시키기 위해 사용
  • @WebMvcTest : 스프링의 여러가지 테스트 어노테이션 중에 Web에 집중하기 위해 사용
  • @Autowired : 스프링이 관리하는 Bean 주입
  • MockMvc : 웹 API를 테스트할 때 사용되며, 스프링 MVC 테스트의 시작점
  • mvc.perform(get("/hello")) : MockMvc를 통해 /hello 주소로 Get 요청을 보냄
  • .andExpect(status().isOk()) : 서버의 상태를 점검. isOk() 는 200인지 아닌지를 검사
  • .andExpect(content().string(hello)) : perform()의 결과를 검증. 즉 여기서는 "hello"가 잘 리턴되었는지 검사

여기까지 다 했었는데... JDK 버전이 15라서 호환이 안된다길래 1.8버전을 이용하여 클래스를 새로 만들었다...

 

우여곡절 끝에 이제 hello가_리턴된다() 함수를 실행시켜 테스트해본다. Tests passed: 1이 출력되면 테스트 결과는 성공

 

실제로 눈으로 확인해보기 위해 Application의 main함수를 run 해본다. Spring 로고가 뜨고 로그에 8080 포트가 출력된다.

 

 

이제 http://localhost:8080/hello 에 접속해보면 hello가 정상적으로 출력된 것도 확인할 수 있다.

댓글