Skip to content

테스트

최진우 edited this page Aug 10, 2021 · 1 revision

단위 테스트

  • 작은 단위의 테스트(주로 모듈)
  • 전체 어플리케이션에서 따로 분리해서 테스트
  • 분리된 환경이기 때문에 mocking을 주로 사용해서 테스트
  • 작은 단위의 리펙토링에도 쉽게 깨지는 문제가 있음
  • 가장 작은 단위이기 때문에 Bottom-up 방식으로 테스트 할 때 좋음

통합테스트

  • 단위 테스트보다 더 넓은 범위의 테스트
  • 보통 두 개 이상의 모듈이 실제로 연결된 상태를 테스트
  • 모듈이 상호작용 하는 것을 테스트 하기 때문에 단위 테스트보다는 mocking 사용이 적음

E2E 테스트

테스트 러너? 테스트 프레임워크?

  • 테스트 러너
    • 기본적으로 테스트를 작성할 수 있는 환경
    • 테스트 파일을 읽어 작성한 코드 실행 후 특정한 형식으로 출력
      • reporter
    • jest, karma
    • 하지만, nodejs가 등장하면서 실행 환경을 구분할 필요가 없어 대부분의 프레임워크와 통합된 형태로 제공
    • karma 같은 경우는 직접 코드를 브라우저에서 실행, 그래서 다른 assertion library이랑 같이 사용
  • 테스트 프레임 워크
    • 테스트 코드 작성을 위한 기반을 만들어주는 환경
    • mocha, jasmine, jest, ava
  • Mocha 같은 경우는 chai라는 assertion library를 따로 사용하도록 권장
  • 보통 테스트 프레임워크에서 다양한 방식의 단언 api를 기본 제공

테스트 더블

  • 실제 객체 대신 테스트를 사용하기 위한 객체를 만들어서 사용

  • 종류

    • Dummy

      • 사용되지 않는 객체

      • 단지 인스턴스 객체만 필요하고 해당 객체의 기능을 전혀 사용하지 않을때.

        예를 들어 클래스를 테스트하고 싶은데 내부에 클래스가 필요한 경우?

        Contructor에 무조건 넣어야 하는 객체의 경우

    • Stub

      • dummy 객체가 실제로 작동하는 것처럼 만든 객체
      • 실제 구현되지 않는 코드를 대체
      • 미리 정의된 결과 값만 제공
    • Fake

      • Stub보다는 좀 더 복잡
      • 실제 코드보단 간편하게 만든 객체
      • 동작 자체는 있지만, 실제 프로덕션 레벨의 객체는 아님
    • Spy

      • 어떤 객체에 속한 함수의 구현을 가짜로 대체하지 않고, 해당 함수의 호출 여부와 어떻게 호출되었는지만을 알아내야 할 때
      • Stub에 약간의 저장 기능을 가지고 있다고 생각하면 편함.
    • Mock

      • 앞에 있는 내용들의 총 집합 느낌
      • 실제 코드와 비교할 정도는 아니지만 앞에 다른 앞의 test double보다는 정교
      • 실제 객체로 테스트 할 수 없는 이유가 있을 때 사용(비용, 시간 등)
      • Mock은 행위를 검증하기 위한 객체 테스트
      • 상태 기반 테스트가 가능하다면 지양해야한다
      • 복잡도 정확성 등 작성이 어려움

mocha vs jest

mocha

  • 단언 라이브러리나, sinonjs(test double)와 같은 라이브러리들을 같이 이용해서 사용
  • 라이브러러리에 대한 선택지가 다양

jest

  • testing framework
  • 기본적으로 단언, 모킹을 지원
Clone this wiki locally