[SpringBoot #1] 스프링부트에서 테스트 코드 작성 - SpringBoot Test

2022. 2. 22. 11:46Web Dev/Spring Boot

728x90
반응형

탄탄한 서비스를 만들기 위해서는 테스트 코드를 이용하여 최소한의 테스트는 거쳐야 한다. 또한, 요즘 채용에 테스트 코드에 관한 사용 여부도 요구하는 기업들도 존재한다.


1. 테스트 코드 소개

TDD : 테스트 코드가 개발을 주도하는 것

Unit Test : 테스트 코드를 먼저 작성하여 확인 하는 것

 

2. TDD (Test Driven Development)

TDD의 프로세스는 이렇게 작동한다.

 

설계 -> 테스트 코드 작성 -> (설계 수정 시) 설계로 회귀 -> 코드 개발 -> (리펙토링 시) 테스트 코드로 회귀

 

2-1. 왜 TDD를 사용하나?

애자일 방법론에서 설계에 대한 확실이 높지 않을 때 서로의 피드백과 협력이 중요하다고 하였기에 이 둘이 반복되면 좋은 결과를 생산할 수 있기 때문이다.

 

2-2. 언제 사용해야 하나?

1. 고객의 요구 조건이 바뀔 확률이 높은 프로젝트 -> 외부적으로 오는 확실성이 없을 때

2. 내가 처음보는 프로젝트 -> 나의 지식에 대한 확실성이 없을 때

3. 프로젝트 과정 중 만들어 개발한 부분을 많이 바꿔야 할 경우

4. 남이 개발 한 것을 유지보수해야 할 경우

 

-> 외부적으로 오는 확실성이 없을 경우 TDD 프로세스를 이용하여 개발

 

즉, 협력과 피드백을 통한 리팩토링으로 인해 좋은 결과를 생산해낸다.

 

2-3. 장점

1. 반복적인 리팩토링을 통해 모듈화가 철저히 이루어짐 -> 종속성과 의존성 낮춘다. 

즉, 일부 기능이 제외 되어도 프로젝트 구조에 영향을 크게 미치지 않는다.

2. 테스트 코드가 있기 때문에 재설계하는 시간이 많이 단축된다.

3. TDD는 자동환 된 테스트를 기본으로 하기 때문에 특정 버그를 찾기에 효율적이다. -> 디버깅 시간 낮아짐

4. 테스트 문서를 통해 결과를 도출 할 수 있다.

5. 대부분의 기능이 모듈화 되어 있고, 테스트 코드가 존재하기 때문에 기능을 추가하는 부분에서 편하다.

 

2-4. 단점

아무래도 많은 테스트와 피드백 수용이 있다보니 생산 속도에 대한 저하가 있다.


3. Unit Test

단위 테스트는 개발 단계 초기에 문제를 발견할 수 있고, 기능에 대한 확실성을 높일 수 있다. 또한, 테스트는 프로젝트에 대한 문서를 제공한다. -> 단위 테스트가 문서로 이용 가능하다.

 

3-1. 개발 방법

테스트 코드를 작성한다 -> 프로젝트 실행 -> 테스트 도구로 HTTP 요청하여 기능이 올바르게 작동하나 확인 -> 결과를 확인 -> 결과가 다를 시 수정 후 재 실행

 

단위 테스트는 수정과 실행, 수정과 실행을 반복하는 방법이다.

 

올바른 값을 얻기 위해 몇 번의 과정을 거쳐 수정을 빠르게 할 수 있고, 더 오래 걸릴 수 도 있다.

 

또한, 올바른 기능을 하는 것에 새로운 기능을 추가한 후 오류가 발생할 때도 있다. 이는 한 기능에 많은 자원을 소모하기에 모두 테스트를 할 순 없다. -> 기존 기능이 잘 작동 되게 보장 

 

3-2. xUnit

대중적인 테스트 프레임 워크 개발환경에 따라 여러 단위 테스트를 해주는 프레임 워크다.

 

3-3. JUnit 어노테이션

1. @SpringBootApplication

-> 스프링 부트의 자동 설정, Bean 읽기와 생성 자동으로 설정

-> 항상 이 어노테이션 먼저 실행되어야 하기 때문에 최상단에 위치한다.

 

2. @RestController

-> 컨트롤러를 JSON을 반환하는 컨트롤러로 생성

 

3. @GetMapping

-> HTTP의 GET의 요청을 받을 수 있는 API로 생성

 

4. @RunWith(SpringRunner.class) -> JUnit4 기준, @ExtendWith(SpringExtension.class) -> JUnit5 기준

-> 테스트 진행 시 내장된 실행자 외에 다른 실행자 실행시킨다.

-> 여기서는 SpringRunner와 SpringExtension을 실행

-> 즉, 연결 자이다.

 

5. @WebMvcTest

-> Spring MVC에 집중할 수 있는 어노테이션

-> 선언 시 Controller, ControllerAdvice 사용 가능

-> 단, Service, Component and Repository 사용 불가

-> 여기서는 Controller만 사용

 

6. @AutoWired

-> Bean을 가져온다.

 

7. private MockMvc mvc 

-> API 테스트 시 사용

-> 테스트의 시작점이다.

-> 이 클래스를 통해서 GET, POST와 같은 API 테스트 가능


<참고>

1, 이동우 저자의 스프링 부트와 AWS 'https://jojoldu.tistory.com/'

2. TDD 방법론 'http://clipsoft.co.kr/wp/blog/tddtest-driven-development-%EB%B0%A9%EB%B2%95%EB%A1%A0/'

728x90
반응형