[Spring Boot] 테스트 코드 작성 이유 (1/5)
테스트 코드
테스트 코드 사진
테스트 코드 작성 이유
- 문제에 대해 미리 발견, 대처할 수 있다.
- 리팩터링 시 부담이 적다.
- 문서로서의 역할을 할 수 있다.
문제 발견 및 대처
테스트 코드를 작성하면 발생 가능한 버그나 예외를 미리 예측해서 대비할 수 있고, 비즈니스 로직이 정상적으로 작동하는지 테스트하여 확인할 수 있다.
리팩토링
테스트 코드는 리팩터링 시 든든한 아군이 된다.
테스트 코드 없이 리팩토링하였을 때 정상작동하여도 버그나 예외에 대해 처리가 잘 되어있는지에 대해 신뢰도가 떨어지게 된다. 그리고 리팩토링 후 문제가 발생하면 어디서 문제가 발생하였는지 파악하기 어려워 리팩토링에 부담이 생기기 마련이다.
하지만 테스트 코드를 작성했다면 리팩토링 후 테스트 코드를 실행시켜보는 것만으로도 다양한 상황에 대처가 되어있는지 확인할 수 있고, 문제 발생 시 어디서 문제가 생겼는지 파악하기 쉽다.
문서화
테스트 코드 자체가 명세 문서가 될 수 있다. 메서드가 어떤 입력값을 받아오는지, 어떻게 동작하는지, 어떤 결괏값을 반환해주는지에 대해 파악할 수 있어 테스트 코드 자체가 문서로서의 기능을 할 수 있다.
단위 테스트, 통합 테스트
단위 테스트
단위 테스트는 애플리케이션의 모듈들을 각각 독립적으로 테스트하는 방법이다.
스프링의 경우 DI 하여 다른 객체를 받아와 동작하는 경우가 많다. 이때 Mock 객체로 대신하여 오직 테스트하려고 하는 객체에 대한 테스트만 진행하여야 한다. 일반적으로 메서드 단위로 진행된다.
* Mock 객체를 생성하는 것을 Mocking이라고 한다.
통합 테스트
통합 테스트는 전체적인 로직이 잘 동작하는지 테스트하는 방법이다. 애플리케이션이 온전히 잘 동작하는지 테스트한다.
Given-When-Then 패턴
Given-When-Then 패턴은 테스트 코드를 작성하는 방법 중 하나이다. 처음 테스트 코드를 작성할 때 어떻게 테스트 코드를 작성해야 하는지 몰라 막막했던 경험이 있을 것이다. Given-When-Then 패턴을 테스트 코드 작성 기본 템플릿으로 생각하고 접근해보자.
Given
테스트에 필요한 변수를 선언하거나 Mocking을 하는 설정 단계이다.
When
테스트의 목적, 실제 테스트해볼 메서드를 실행시켜 결괏값을 받는다.
Then
결괏값이 예상과 같이 잘 나왔는지 확인하는 단계이다.
세 줄 요약
- 테스트에 필요한 값들을 주고 (Given)
- 테스트할 메서드를 실행시켰을 때 (When)
- 그때 (Then) 결괏값이 예상과 같은지 비교
F.I.R.S.T
Fast
테스트는 빠르게
Isolated
다른 테스트 코드나 외부 소스에 의존하지 말고 독립적으로
Repeatable
어떤 환경에서도 반복 가능하게
Self-Validating
결괏값 비교는 테스트 코드가
* 결과값 비교를 콘솔에 출력해 개발자가 직접 눈으로 확인해야 하는 테스트 코드는 X, Assert로 비교까지 해주는 코드 O
Timely
(TDD) 테스트 코드는 애플리케이션 코드 작성 전에