Kakaopay Tech Blog

실무에서 적용하는 테스트 코드 작성 방법과 노하우 Part 3: Given 지옥에서 벗어나기 - 스노우볼을 굴려라

thumbnail

목차

  1. Given-When-Then 구조
  2. 테스트 코드 리팩토링
  3. 테스트 데이터 관리
  4. 픽스처의 활용
  5. 테스트 삼각삭형

1. Given-When-Then 구조

  • 테스트 케이스를 Given, When, Then 단계로 명확히 구분하여 가독성을 높이고 테스트 목적을 명확히 전달한다.
  • Given: 상태를 설정하는 단계, 필요한 데이터를 주어진 상태로 만드는 단계이다.
  • When: 특정 동작이나 메소드를 호출하는 단계로, 테스트하고자 하는 동작이 실행되는 시점이다.
  • Then: 기대 결과를 검증하는 단계로, 결과가 예상한 대로 나왔는지 확인하는 단계이다.

2. 테스트 코드 리팩토링

  • 테스트 코드도 리팩토링의 대상이다. 중복된 코드를 제거하고 가독성을 높이기 위해 메소드 추출, 클래스 추출, 상속 등의 리팩토링 기법을 적용한다.
  • 테스트 코드가 깔끔하고 이해하기 쉬우면 유지보수도 용이해지고 버그 발견 및 수정도 빠르게 이루어진다.

3. 테스트 데이터 관리

  • 테스트 데이터는 테스트의 성공 또는 실패에 영향을 미친다. 고정된 데이터를 사용하지 않고 테스트마다 새롭고 균일한 데이터를 생성하여 의도치 않은 영향을 줄일 수 있다.
  • 테스트 데이터의 관리는 미리 정의된 데이터 세트를 활용하거나 데이터 빌더를 통해 유연하고 효율적으로 처리할 수 있다.

4. 픽스처의 활용

  • 테스트를 수행하는 데 필요한 초기 상태나 환경, 데이터를 픽스처(Fixture)라고 한다. 테스트를 실행하기 전에 필요한 설정, 데이터베이스 초기화 등을 포함한다.
  • 픽스처를 잘 활용하면 반복적이고 일관된 테스트를 수행할 수 있으며, 테스트 환경을 안정적으로 유지할 수 있다.

5. 테스트 삼각삭형

  • 테스트 삼각삭형은 단위 테스트, 통합 테스트, 인수 테스트 세 가지 종류의 테스트를 조화롭게 조합해야 한다는 개념이다.
  • 단위 테스트는 작은 단위의 독립적인 코드에 대한 테스트이고, 통합 테스트는 구성 요소 간의 상호작용을 테스트한다. 인수 테스트는 시스템 전체의 동작을 테스트한다.
  • 이 세 가지 테스트를 모두 고려하여 테스트 전략을 수립하고 테스트 커버리지를 확보해야 한다.