스프링 부트에서 테스트 코드를 작성하자!
견고한 서비스를 원하면 TDD나 최소한 테스트 코드는 작성
TDD는 테스트주도개발(Test-Driven Development)을 이야기하며 단위 테스트를 말하는데 테스트 코드를 우선적으로 작성한다.
- 항상 실패하는 테스트를 먼저 작성(RED)
- 테스트가 통과하는 프로덕션 코드를 작성(GREEN)
- 테스트가 통과하면 프로덕션 코드를 리펙토링(Refactor)
단위 테스트
단위 테스트의 장점
- 개발단계 초기에 문제를 발견하게 도와줌
- 나중에 코드를 리팩토링하거나 라이브러리 업그레이드 등에서 기존 기능이 올바르게 작동하는지 확인할 수 있다.
- 단위 테스트는 기능에 대한 불확실성을 감소시킬 수 있다
- 시스템에 대한 실제 문서를 제공합니다.즉,단위 테스트 지체가 문서로 사용
빠른 피드백(단위 테스트를 배우기 전에 진행한 개발 방식)
1)코드를 작성하고
2) 프로그램을 실행한 뒤
3) API테스트 도구로 HTTP 요청
4) 요청 결과를 System.out.println()으로 눈으로 검증
5) 결과가 다르면 다시 프로그램(Tomcat)을 중지하고 코드를 수정
확인을 위해 항상 2~5를 반복해야함
단위테스트 순서
1.기능 단위의 테스트 코드를 작성(다른 기능없이 순수한 테스트 코드만을 작성)
2. 테스트 코드를 작성하면 더는 사람이 눈으로 검증하지 않게 자동검증이 가능
3. 개발자가 만든 기능을 안전하게 보호(기존 기능이 잘 작동되는 것을 보장)
ex) B 기능이 잘 되어 오픈했더니 기존에 잘되던 A 기능에 문제가 생긴 것을 발견
항상 코드를 추가할 때마다 모든 서비스를 가동할 수는 없다
개발을 함에 있어 테스트 코드의 필요성을 필자는 언급하고 있다
대표적인 xUnit 프레임워크들
- JUnit - Java
- DBUnit - DB
- CppUnit - C++
- NUnit - .net
@SpringBootApplication
스프링 부트의 자동 설정,스프링 Bean 읽기와 생성을 모두 자동으로
@SpringBootApplication이 있는 위치부터 설정을 읽어가서 항상 프로젝트의 최상단에 위치해야함
main메소드에서 실행하는 SpringApplication.run으로 내장 WAS(Web Application Server)를 실행
내장WAS? 별도로 외부에 WAS를 두지 않고 애플리케이션을 실행할 때 내부에서 WAS를 실행
언제 어디서나 같은 환경에서 스프링 부트를 배포할 수 있기 때문에 내장 WAS를 권함
@RunWith(SpringRunner.class)
- 테스트를 진행할 때 JUnit에 실행자 외에 다른 실행자로 실행
- 스프링 부트 테스트와 JUnit 사이에 연결자 역할
@Getter
- 선언된 모든 필드의 get 메소드를 생성해줍니다
@RequiredArgsConstructor
- 선언된 모든 final 필드가 포함된 생성자를 생성해준다
- final이 없는 필드는 생성자에 포함되지 않는다
댓글