- 이번 퀘스트에서는 자동화된 테스트에 어떤 장점이 있는지, 어떤 식으로 구축할 수 있는지에 대해 알아보겠습니다.
- Automated Test
- TDD
- Unit Test
- Integration Test
- E2E Test
- Stub & Mock
- Jest
- Puppeteer
- 자동화된 테스트를 만드는 것에는 어떤 장점과 단점이 있을까요?
장점으론 코드가 오래 유지되는 환경에서 유지보수가 매우 간편해지고, 코드 변경이 용이하다. 다만 코드작업초기, 안정함보다 속도가 중요시된다면 TDD를 적용하는 것이 어려울 수 있다. 하지만 TDD는 선택의 문제가 아닌, 도입 시기의 문제이다. 프로젝트를 장기화할 경우 TDD가 무조건 유리하고, non TDD에 비해 자원절약을 할 수 있기 때문에 언젠가는 반드시 도입해야하는 문제이다
- TDD(Test-Driven Development)란 무엇인가요? TDD의 장점과 단점은 무엇일까요?
TDD는 소프트웨어 개발 프로세스, 혹은 프로세스 개발 방법론, 개발자가 설계하고 이를 구현하는 과정에서 요구사항을 검증하는 테스트를 적용한 개발 과정이다.
- TDD(Test-Driven Development)란 무엇인가요? TDD의 장점과 단점은 무엇일까요?
- 테스트들 간의 계층에 따라 어떤 단계들이 있을까요?
테스트의 난이도, 적용범위 및 역할 등에 따라 4가지 테스트로 나뉜다
- static:정적분석, 문법/변수관련 오류 탐색
- unit:각각의 독립적인 동작(logic,class)수행 관련 오류 탐색
- funcional:각 unit들의 조화, 하나의 기능으로 잘 수행하는지 관련 오류 탐색
- end to end:최종 결과물, 인터페이스 및 전체적인 내부 동작 관련 오류 탐색
- 유닛 테스트, 통합 테스트, E2E 테스트는 각각 어떤 것을 뜻하나요?
유닛 테스트:작은 유닛을 전체 어플리케이션에서 떼어 내어 분리된 환경에서 테스트하는 것을 말하낟. 통합테스트:유닛 테스트보다 좀 더 넓은 범위의 테스트를 말하며 보통 두 개 이상의 모듈이 실제로 연결된 상태를 테스트한다. 실제 사용자의 관점에서 테스트를 진행하며, 그런 의미에서 기능테스트 혹은 UI테스트라고 불리기도 한다. E2E 테스트는 사용자의 실행 환경과 거의 동일한 환경에서 테스트를 진행하기 때문에 실제 상황에서 발생할 수 있는 에러를 사전에 발견할 수 있다
- 테스트에 있어서 Stub과 Mock은 어떤 개념을 가리키는 것일까요?
stub:mock 객체를 구현하기 위해 필요한 기능들 중 하나로, test에 필요한 mock 객체의 동작을 지정해주는 과정 mock:행위기반 테스트, 즉 상태가 없는 객체의 동작 수행여부를 검증하기 위해 대신 행위를 검증해주는 객체
- Jest는 어떤 일을 하며 어떻게 사용하는 테스트 프레임워크일까요?
jest는 페이스북에서 만든 자바스크립트 전용 테스트 프레임워크이다. 문서화가 잘되어있고, 그만큼 API가 체계적으로 정리되어 있어 많이 활용한다. 전용 패키지가 있어 npm을 통해 설치한 후, 특정 테스트를 위한 기능(메소드)을 활용하여 예상하는 결과(상태 혹은 행동의 결과)가 출력되는지 확인하는 방식으로 진행한다.
- Jest 이외의 테스트 프레임워크는 어떤 것이 있고 어떤 장단점이 있을까요?
mocha, pupperteer, jasmine 등이 있다. jasmin: BDD 스타일의 단언 API를 사용하는 통합 테스트 프레임워크이며, Node.js와 브라우저 환경 모두에서 사용 가능하다. Jasmine은 모든 기능을 통합해서 제공하기 때문에 라이브러리를 추가로 설치하고 설정할 필요 없이 쉽게 사용할 수 있다. mocha:Mocha는 Node.js와 브라우저에서 실행되는 기능이 풍부한 자바스크립트 테스트 프레임워크이다. 비동기식 테스트를 간단하게 진행할 수 있다. 또한 테스트가 연속적으로 실행되어 유연하고 정확한 보고를 가능하게 하며 동싱에 미검증 예외를 올바른 테스트 사례에 맵핑한다.Mocha는 확장성이 좋다고 알려져 있는데, 이것은 여러가지 라이브러리를 사용해서 기능을 확장시킬 수 있다는 의미한다. pupperteer:크로미움이 포함되어있고 기본적으로 헤드가 없는 상태로 실행되어 UI없이 간편하게 백그라운드에서 실행된다. 브라우저 창을 띄우지 않고 백그라운드에서 가상으로 진행되며, 특정 페이지에 접속하고 렌더링 되는 과정 후 수행하고자 하는 코드를 수행하는데 용이하다.
- Jest 이외의 테스트 프레임워크는 어떤 것이 있고 어떤 장단점이 있을까요?
- Puppeteer는 어떤 일을 하며 어떻게 사용하는 테스트 프레임워크일까요?
chrome.exe를 활용해서 브라우저 환경에서 test에서 기대하는 결과가 존재하는지, 출력되는지 확인하는 방식의 프레임워크이다. Puppeteer를 활용하여 TDD를 진행할 경우
- 내부적으로 브라우저 환경에서 실제 구현이 이루어졌는지 확인하기 위해 크롬 브라우저를 실행한다.
- 그 후에 빠른 시간동안 test를 수행하고, 브라우저를 닫는다.
- 다른 화면을 표시하는 TDD방식과는 달리, CLI를 통한 접근이 가능하며 구현된 화면에 별도로 나타내지는 않는다.
- 직전 퀘스트의 메모장의 서버와 클라이언트 각 부분에 유닛 테스트, 통합 테스트, E2E 테스트 등을 추가해 보세요.
npm test
명령을 통해 모든 테스트가 돌고 그 결과를 출력할 수 있어야 합니다.
- 테스트의 커버리지는 어떤 개념일까요? 프로젝트에서 테스트의 커버리지는 어떻게 접근하는 것이 좋을까요?