7 테스트 코드

구보선·2023년 2월 12일
0

스프링부트

목록 보기
9/9

테스트 코드

우리가 작성한 코드나 비즈니스 로직 자체를 테스트하기 위해 작성된 코드

7.1 테스트 코드를 작성하는 이유

  • 개발 과정에서 문제를 미리 발견
  • 리팩토링 리스크 감소
  • 애플리케이션을 가동해 직접 테스트하는 것보다 빠르게 테스트 진행 가능
  • 하나의 명세 문서로서 기능 수행
  • 몇 가지 프레임워크에 맞춰 테스트 코드를 작성하면 좋은 코드를 생산
  • 코드가 작성된 목저긍ㄹ 명확하게 표현, 불필요한 내용이 추가되는 것을 방지

7.2 단위 테스트와 통합 테스트

테스트 대상 범위 기준

  • 단위 테스트: 애플리케이션의 개별 모듈을 독립적으로 테스트
  • 통합 테스트: 애플리케이션을 구성하는 다양한 모듈을 겹합해 전체적인 로직이 의도한 대로 동작하는지 테스트

7.2.1 단위 테스트의 특징

테스트 대상의 범위를 기준으로 가장 작은 단위의 테스트 방식으로, 일반적으로 메서드 단위로 테스트를 수행한다.
모듈을 독립적으로 테스트
데이터베이스나 네트워크 같은 외부 요인들은 제외하고 진행

7.2.2 통합 테스트의 특징

모듈을 통합하는 과정에서의 호환성 등을 포함해 애플리케이션이 정상적으로 동작하는지 확인하기 위해 수행하는 테스트 방식이다.
여러 모듈을 함께 테스트하여 정상적인 로직 수행이 가능한지 확인
외부 요인들을 포함하고 테스트를 진행

7.3 테스트 코드를 작성하는 방법

7.3.1 Given-When-Then 패턴

Given : 테스트를 수행하기 전 테스트에 필요한 환경을 설정하는 단계
테스트에 필요한 변수를 정의하거나 Mock객체를 통해 특정 상황에 대한 행동을 정의

When : 테스트의 목적을 보여주는 단계
실제 테스트 코드가 포함, 테스트를 통한 결괏값을 가져옴

Then : 테스트의 결과를 검증하는 단계
When단계에서 나온 결괏값을 검증하는 작업을 수행, 검증이 필요한 부분을 포함

BDD(Behavior-Driven-Development;행위 주도 개발)를 통해 탄생한 테스트 접근 방식
불필요하게 코드가 길어져 단위 테스트에서는 잘 사용하지 않음
'명세' 문서의 역할을 수행한다는 측면에서 많은 도움이 됨

7.3.2 좋은 테스트를 작성하는 5가지 속성(F.I.R.S.T)

F.I.R.S.T는 테스트 코드를 작성하는 데 도움이 될 수 있는 5가지 규칙을 의미
보통 단위 테스트에 적용

Fast : 테스트는 빠르게 수행돼야 함
Isolated : 하나의 테스트 코드는 목적으로 여기는 하나의 대상에 대해서만 수행돼야 함
Repeatable : 테스트는 어떤 환경에서도 반복 가능하도록 장성해야 함
Self-Validating : 테스트는 그 자체만으로도 테스트의 검증이 완료돼야 함
Timely : 테스트하려는 애플리케이션 코드를 구현하기 전에 완성돼야 함 (주로 TDD에 적용)

0개의 댓글