-
[SPRINGBOOT]테스트코드 작성SPRINGBOOT 2022. 4. 4. 02:02
참조 : 스프링부트와 AWS로 혼자 구현하는 웹 서비스(이동욱 저)
CH2. 스프링 부트에서 테스트 코드를 작성하자
1. 테스트 코드 소개
* TDD
Test Driven Development의 약자로 테스트 주도 개발이라고 한다.
작은 단위의 테스트 테이스를 작성하고 이를 통과하는 토드를 추가하는 단계를 반복하여 구현한다.
- 항상 실패하는 테스트를 먼저 작성
- 테스트가 성공하는 프로덕션 코드를 작성
- 테스트가 통과하면 프로덕션 코드를 리팩토링
* 단위 테스트 : 기능단위의 테스트 코드를 작성하는 것
테스트 코드를 작성하는 이유
- 단위 테스트는 개발단계 초기에 문제를 발견하게 해준다.
- 단위 테스트는 개발자가 나중에 코드를 리팩토링 하거나 라이브러리 업그레이드 등에서 기존 기능이 올바르게 작동하는지 확인할 수 있다.
- 단위 테스트는 기능에 대한 불확실성을 감소시킬 수 있다.
- 단위 테스트는 시스템에 대한 실제 문서를 제곤한다.
- 빠른 피드백
- 자동검증
- 개발자가 만든 기능을 안전하게 보호(새로운 기능이 추가될 때 기존 기능이 잘 작동되는 것을 보장)
앞으로 자바용 테스트 프레임워크인 JUnit을 사용하도록 할 것이다.
2. 테스트 코드 작성하기
① 자바 디렉토리 밑에 패키지를 생성해준다.
② 웹 사이트 주소의 역순으로 패키지 명을 설정한다.
③ 해당 패키지 밑에 JAVA 클래스를 생성한다.
④ 클래스 명을 설정한다.
⑤ 코드를 작성한다.
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; //@SpringBootApplication이 있는 위치부터 설정을 읽기 때문에 해당 클래스는 프로젝트의 최상단에 위치 @SpringBootApplication //스프링부트의 자동설정, 스프링Bean 읽기와 생성을 자동으로 설정 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); // SpringApplication.run로 내장 WAS 실행 } }
내장 WAS란 별도로 외부에 WAS를 두지 않고 애플리케이션을 실행할 때 내부에서 WAS를 실행하는 것이다.
즉, 톰캣을 설치할 필요가 없다.
스프링 부트에서 내장 WAS 사용이 권장되는 이유는 언제 어디서나 같은 환경에서 스프링 부트를 배포할 수 있기 때문이다.
⑥ 현재 패키지에 하위 패키지 'web'을 만들어준다.
컨트롤러와 관련된 쿨래스들을 모두 이 web패키지에 담을 것이다.
⑦ web 패키지 밑에 'HelloController'라는 컨트롤러(JAVA 클래스)를 만들어준다.
⑧ API 만들기
package com.study.crystal.test.web; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController //컨트롤러를 JSON을 반환하는 컨트롤러로 만들어줌 public class HelloController { @GetMapping("/hello") //HTTP Method인 Get의 요청을 받을 수 있는 API를 만들어줌 public String hello(){ return "hello"; } }
⑨ src/test/java 밑에 똑같은 패키지를 생성해준다.
⑩ 테스트 코드를 작성할 클래스를 생성한다.
보통은 대상 클래스 이름에 Test를 붙여서 생성한다.
⑪ 테스트 코드를 작성한다.
package com.study.crystal.test.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; //스프링 부트 테스트와 JUnit 사이에 연결자 역할을 함 //SpringRunner라는 스프링실행자를 사용한다는 의미 @RunWith(SpringRunner.class) @WebMvcTest(controllers = HelloController.class) // 스프링 어노테이션 중 웹에 집중할 수 있는 어노테이션 public class HelloControllerTest { //빈 주입 어노테이션 @Autowired //웹 API 테스트할 때 사용 //스프링 MVC 테스트의 시작점 // 이 클래스를 통해 HTTP, GET, POST 등에 대한 API 테스트가 가능 private MockMvc mvc; @Test public void hello가_리턴된다() throws Exception { String hello = "hello"; //MockMvc를 통해 /hello 라는 주소로 HTTP GET 요청 //체이닝 지원 mvc.perform(get("/hello")). //mvc.perform의 결과를 검증 //HTTP Header의 Status를 검증(200, 404, 500등의 상태) andExpect(status().isOk()). //Ok, 즉 200인진 아닌지 검증 //응답 본문의 내용을 검증 andExpect(content().string(hello)); //Controller에서 "hello"를 리턴하는지 검증 } }
⑬⑫ 왼쪽의 화살표를 눌러 테스트 코드를 실행한다.
검증 성공!
⑬ 수동 실행한다.
Application 클래스의 main함수 옆 화살표를 눌러 실행시켜준다.
실행 시키면 8080 포트로 톰캣서버가 실행되었다고 로그가 찍힌다.
⑭ 브라우저를 통해 확인!
수동으로 검증하고 테스트 코드를 작성하는 것이 아니다.
테스트 코드로 먼저 검증을 한 후, 정말 결과에 대한 신뢰가 없을 때 직접 프로젝트를 실행시켜 확인을 한다.
'SPRINGBOOT' 카테고리의 다른 글
[SPRINGBOOT] 기본 CRUD API 만들기②(수정, 조회) (0) 2022.04.24 [SPRINGBOOT] 기본 CRUD API 만들기①(등록) (0) 2022.04.17 [SPRINGBOOT] JPA 기본 기능과 설정 (0) 2022.04.07 [SPRINGBOOT] 롬복 (0) 2022.04.05 [SPRINGBOOT] IntelliJ 활용한 개발환경 구성 (0) 2022.04.03