소프트웨어 개발에서 각 개별적인 구성 요소 또는 모듈을 독립적으로 테스트하는 접근 방법
코드의 작은 부분인 함수, 메서드 또는 클래스의 동작을 분리된 환경에서 확인하여 해당 코드가 의도한 대로 작동하는지 확인하는 것을 목표로 함
버그 발견 시간이 늦어짐에 따라 비용이 기하급수적으로 커짐
하나의 기능이 올바르게 동작하는지를 독립적으로 테스트하는 것
빠르게 작성할 수 있고 문제 발생 시 어느 부분이 잘못 되었는지를 빠르고 정확하게 확인할 수 있음
Development: 개발
Unit Tests (단위 테스트): 개발자 테스트
QA Testing:
블랙박스 테스팅
주로 QA 팀이 Production 환경과 유사한 환경(Stage)에서 테스팅
Production: 실 서비스 운영 환경
Fast : 테스트는 빠르게 동작하고 자주 가동 해야함
Independent : 각각의 테스트는 독립적어이야 하며, 서로에 대한 의존성은 없어야 함
Repeatable : 어느 환경에서도 반복이 가능해야 함
Self-Validating : 테스트는 성공 또는 실패 값으로 결과를 내어 자체적으로 검증 되어야 함
Timely : 테스트는 테스트 하려는 실제 코드를 구현하기 직전에 구현 해야함
Given / When / Then 패턴
: 테스트 코드 스타일을 표현하는 방식
@Test
@DisplayName("Test")
void test() {
// Given
// When
// Then
}
코드 품질 향상
변경 사항 검증
문서화
리팩토링 지원