1 minute read

테스트는 ‘왜’ 하는가?

코드를 만들고 매번 수동으로 테스트 하고 수정하는 작업은 불완전함 모든 유스 케이스에 대응 불가능

  • 테스트 자동화는 테스트 코드가 실제 동자겡 관여하는 코드와 별개로 작성되어야 가능

Behavior Driven Development (BDD)

테스트, 문서, 예시를 한데 모아놓은 개념

  • 스펙(명세서) : 코드를 작성하기 전에 코드의 할 일을 상상한 후 이를 자연어로 표현 한 산출물

다양한 유스 케이스와 자세한 설명, 테스트 담김

  • 스펙 구성요소
  1. describe(“title”, function() {…})

구현하고자 하는 기능에 대한 설명 it 블록을 한데 모아주는 역할

  1. it(“유스케이스 설명”, function() {…})

첫번째 인수엔 특정 유스 케이스에 대한 설명. 자연어로 작성 두번째 인수엔 유스 케이스 테스트 함수

  1. assert.equal(value1, value2)

it 블록 내부의 코드 기능 제대로 구현 시 에러없이 실행 명세서는 실행 가능. 명세서 실행 시 it 블록 안의 테스트 실행

개발 순서

  1. 명세서 초안 작성. 기본적인 테스트 포함
  2. 명세서 초안에 따른 코드 작성
  3. 테스트 위해 Mocha 테스트 프레임워크 사용해 명세서 실행. 에러 출력되지 않을 떄 까지 코드 수정
  4. 모든 테스트 통과하는 코드 초안 완성
  5. 고려하지 않던 유스 케이스 추가
  6. 세번째로 돌아가 수정
  7. 기능 완성까지 3~6 반복

반복적인 작업 완료 시 완전히 동작하는 코드와 테스트 둘 다 확보

스펙 실행하기

라이브러리 리스트

  • Mocha : 핵심 테스트 프레임워크, describe, it 같은 테스팅 함수 제공
  • Chai : 다양한 assertion 제공
  • Sinon : 함수의 정보 캐내는 데 사용

코드 초안

통과 만을 목적으로 코드 간단히 작성

스펙 개선

함수 제역할 테스트 위해 더 많은 유스 케이스 추가

  • 스펙 테스트 추가 방법
  1. 기존 it 블록에 assert 하나 더 추가

첫 번째 assert 실패 시 두 번째 결과 알 수없음

  1. 테스트 하나 더 추가 (it 블록 추가)

둘 다 알 수 있음

  • 테스트 하나에선 한 가지만 확인

코드 개선

여러 테스트 통과할 수 있는 코드로 개선

중첩 descibe

새로운 테스트 ‘하위 그룹’ 정의 시 사용

  • befor/after 와 beforeEach/afterEach

  • before/after : 전체 테스트 전/후 실행

  • beforeEach/afterEach : 매 it 전/후 실행

스펙 확장

조건이 맞지 않을 때 맞는 값 반환하는지 검사하는 테스트 추가.

  • 다양한 assertion

Chai 에서 다양한 assertion 지원

스펙

스펙이 있어야 대규모 프로젝트에서 함수 개선하거나 변경 가능.

  • 테스트 하지 않았을 시
  1. 대책없이 코드 변경해서 버그 발생

  2. 수정이나 개선 기피

  • 잘 테스트 된 코드는 더 나은 아키텍쳐 만듬.

요약

  • 테스트는 모든 유스 케이스에 대응해서 완전히 작동하는 코드 만들기 위해.

  • Behavior Driven Development (BDD) 는 테스트, 문서, 예시를 한데 모은 개념

  • 개발순서는 테스트에 따라 정해짐

  • 스펙이 있어야 대규모 프로젝트에서 함수를 개선하거나 변경 가능

  • 잘 테스트 된 코드는 더 나은 아키텍쳐 만듬

Categories: ,

Updated: