테스트 - woowa-techcamp-2021/store-4 GitHub Wiki
단위 테스트
- 작은 단위의 테스트(주로 모듈)
- 전체 어플리케이션에서 따로 분리해서 테스트
- 분리된 환경이기 때문에 mocking을 주로 사용해서 테스트
- 작은 단위의 리펙토링에도 쉽게 깨지는 문제가 있음
- 가장 작은 단위이기 때문에 Bottom-up 방식으로 테스트 할 때 좋음
통합테스트
- 단위 테스트보다 더 넓은 범위의 테스트
- 보통 두 개 이상의 모듈이 실제로 연결된 상태를 테스트
- 모듈이 상호작용 하는 것을 테스트 하기 때문에 단위 테스트보다는 mocking 사용이 적음
E2E 테스트
- 종단(Endpoint) 간 테스트로, 사용자의 입장에서 테스트 하는 것
- Web, App 등에서 GUI를 통해서 시나리오, 기능 테스트 등을 수행
- https://juyoungpark718.github.io/posts/144 (cypress)
- https://www.notion.so/storybook-a476936105614912ab320188dcc1a12d (storybook)
테스트 러너? 테스트 프레임워크?
- 테스트 러너
- 기본적으로 테스트를 작성할 수 있는 환경
- 테스트 파일을 읽어 작성한 코드 실행 후 특정한 형식으로 출력
- 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
- 기본적으로 단언, 모킹을 지원