[WIP] TDD 와 Test Code

TDD 개발 방식과 단위/통합 테스트, Jest 사용법을 소개하며 효과적인 테스트 코드 작성에 대해 알아봅니다.

오래전부터 TDD 에 대해 공부를 하려고 다짐했었지만, 항상 다음으로 공부를 미뤄왔었다. 회사에서는 NestJS 를 도입하고, 테스트 코드를 점점 추가하기 시작했다. 하지만 테스트 코드를 쓰면서 들었던 생각이, 테스트 코드에 대해 제대로 알지 못한 상태에서 테스트 코드를 써 나간다면, 오히려 쓰지 않는것이 낫겠다 라는 생각이 들었었다. 때로는 테스트 코드를 쓰면서 너무 당연한, 결과가 정해져 있는 테스트 코드를 쓴다 라는 느낌을 강하게 받았다. 테스트 코드를 쓰면서 스스로 좀 더 좋은 개발자라는 위안을 얻을 수는 있지만, 누군가에게는 허례허식으로 보일 수 잇다는 생각이 들었다. 이러한 생각이 들자, 더이상 TDD 와 Test Code 에 대해 공부를 미룰 수 없었다.




TDD 개발

통상적인 개발의 경우, 기능 설계 이후 바로 코드를 작성한다. TDD 의 경우, 기능 설계 이후 테스트 코드를 먼저 작성하고, 이 테스트 코드에 부합하는 코드를 작성한다.



Unit Test

소스 코드의 개별 단위 를 테스트하여 사용할 준비가 되었는지 확인하는 테스트 방법이다. 개발 라이프 사이클의 초기 단계에서 버그가 식별되므로, 버그 수정 비용을 줄이는 데에 도움이 된다.

왜 단위 테스트를 해야 하는가 ?

  1. 프로그램이 다양한 의존성을 지니고 있을 때, 다양한 의존성들은 제거한 상태에서 쉽게 로직을 테스트 할 수 있다. ex. DB 연결이 있어야만 로직을 수행할 수 있는 API 의 경우, DB Connection 부분을 mock 객체로 대체한 후에 테스트 할 수 있다.
  2. 의존성을 지니는 부분에서 버그가 나는 것을 방지하기 위해서, 의존성을 제거한 상태에서 테스트를 진행한다.

단위 테스트의 조건

  1. 독립적이어야 하며, 어떤 테스트도 다른 테스트에 의존적이면 안된다.
  2. 다른 의존성으로부터 격리되어야 한다. 예를 들어, axios 와 같이 테스트 대상이 의존하는 것을 다른 것으로 대체해야 한다.




Jest

실무에 도입한 테스트 라이브러리는 Jest 이다. Jest 는 Facebook 에서 개발한 테스트 라이브러리이며, 쉽게 단위 테스트, 통합테스트를 수행할 수 있게 해 준다.


Filename Convention

Jest 는 다음과 같은 파일명의 파일을 테스트 파일로 인식한다.

| 분류 | 값 | | --- | --- | | File | ${filename}.test.js/ts | | File | ${filename}.spec.js/ts | | Directory | __tests__ |


Jest 사용법

| 분류 | 값 | | --- | --- | | describe | 여러 관련 테스트를 그룹화 하는 블록을 생성한다. | | it | 개별 테스트 를 수행. 각 테스트는 하나의 문장으로 네이밍하는 것이 컨벤션이다. | | expect | expect 함수는 값을 테스트 할 때마다 사용된다. 단독적으로 사용되지 않고, matcher 와 함께 사용된다. | | matcher | expect 함수와 같이 사용되며, 값을 비교할 때 도움을 준다. | | jest.fn() | Mock 함수를 생성한다. 단위 테스트를 작성할 때, 테스트를 독립적으로 만들기 위해 mock 함수를 생성하여 테스트 코드를 작성한다. 또한, mock 함수는 이 함수에 어떠한 일들이 발생했는지, 다른 코드들에 의해 어떻게 호출되었는지를 기억할 수 있다. (Spy On)|


Integration Test

통합테스트는 모듈을 통합하는 단계에서 수행하는 테스트이다. 단위 테스트를 먼저 수행하여 모듈들이 잘 작동하는 것을 확인했다면, 이제 이 모듈들을 연동하여 테스트를 수행한다. 통합테스트는 1. 모듈들의 상호 작용이 잘 이루어지는지 검증하기 위해, 2. 통합하는 과정에서 발생할 수 있는 오류를 찾기 위해 수행한다.

목차

TDD 개발 Unit Test Jest Filename Convention Jest 사용법 Integration Test

이것도 읽어보세요