개요
사실 개발을 해오면서 TDD, 테스팅, E2E, Unit-Test 라는 키워드를 많이 접해왔다. 하지만 이게 실제로 어떤 개념인지 자세히 알지는 못했다. 그래서 이번 기회에 프론트엔드 테스팅을 알아보고 경험해보고 직접 프로젝트에 적용해보려고 한다.
사전 지식
1. TDD vs BDD
TDD
TDD(Test-Driven-Development)는 테스트 주도 개발, BDD(Behavior-Driven-Development)는 행동 주도 개발을 의미한다. 사실 단어의 의미만 들어서는 TDD와 BDD가 무엇인지 감이 잘 오지 않는다.
TDD는 말 그대로 테스트가 개발을 주도하는 개발 프로세스를 의미한다. 보통 일반적인 상황에서는 개발을 할 때에 코드를 먼저 작성하지만, TDD는 테스트 케이스를 먼저 작성한 후에, 테스트를 통과할 수 있는 코드를 작성함으로서 개발을 진행한다. TDD의 개발 사이클은 다음과 같다.
앞서 말했던 것처럼 TDD는 테스트 주도 개발이기 때문에 구현해야할 부분을 테스트하는 코드를 먼저 작성해야 한다.
2. 테스트 코드를 실행하기
먼저 작성한 테스트 코드가 실패하는 지 확인해야 한다. 만약 이 테스트가 성공한다면 구현하지도 않은 부분의 코드의 테스트가 성공했다는 뜻이므로 버그를 찾아야 한다.
3. 실패한 테스트 코드를 성공시키기 위한 최소한의 코드 구현하기
이제 자신이 먼저 작성한 테스트 코드에 따라서 코드를 작성하면 된다.
4. 코드 리팩토링하기
필요에 따라서 구조적으로 잘못된 부분을 수정하면 된다.
이러한 절차를 걸쳐서 TDD의 개발은 진행된다.
BDD
BDD는 TDD에서 파생된 개발 프로세스이다. 이전까지의 단위 테스트는 테스트의 대상이 되는 기능의 구현 형태에 너무 많은 영향을 받는다는 문제점이 있었다. 테스트 대상 기능이 입출력의 변화없이 내부 구현의 변경만 있는 상황에서도 불필요한 테스트 코드 수정이 발생하는 상황이 생긴다는 것이다.
BDD는 이런 문제를 해결하기 위해서 테스트를 코드의 구현에 집중하지 않고, 코드의 동작에 집중하게 되었다. 행위에 더 집중한 형태의 TDD라고 생각하면 된다.
2. 단위 테스트(Unit-Test)
3. E2E 테스트 (End-to-End Test)
4. 통합 테스트 (Integration Test)
5. 테스트 케이스 (Test Case)
6. 테스트 더블 (Test Double)
7. 테스트 커버리지 (Test Coverage)
리액트 앱 생성하기
위 명령어를 통해서 하위 디렉토리에 react-test라는 디렉토리가 생기고 그 안에 리액트 앱이 생성됐을 것이다. 그 이후의 내용은 다음 포스트에서 다루겠다.