TDD with Mocha + Chai(1)

Doum Kim·2020년 6월 27일
0

TDD

목록 보기
1/2
post-thumbnail

테스트 주도 개발

TDD?

TDD 테스트 주도 개발이란 뜻이다 그럼 정확하게 어떤 의미인지 확인해보자.
벨로퍼트님 블로그를 참고하면 TDD란 쉽게 설명하면 선 테스트 코드 작성, 후 구현이라고 한다.

흠.. 이게 무슨 뜻일까?

TDD의 3가지 절차를 보면 이해하기 쉽다.

❌ 실패

첫 번째 절차는 실패이다.
프로젝트에서 가장 먼저 구현할 기능에 대한 실패 테스트 케이스를 만든다.

⭕️ 성공

두 번째 절차는 성공이다.
실패하는 테스트 케이스를 통과시키기 위하여 성공 테스트 케이스를 만든다.

🛠 리팩토링

구현한 코드에 중복되는 부분등의 개선 사항이 있다면 리팩토링을 진행한다.
리팩토링 후에도 테스트를 통과하는지 꼭 확인한다. 모든 테스트를 통과한다면 다시 첫 번째 절차로 돌아가 새로운 기능에 대한 실패 테스트 케이스를 만든다.

Unit Test?

신뢰할 수 있는 시스템은 신뢰할 수 있는 컴포넌트로 구성되어 있다.
그리고 프로그램은 이런 컴포넌트가 레고 블록처럼 조립되어 있다.
그렇다면 각 컴포넌트가 서로 약속한 대로 작동을 한다면 복잡한 프로그램을 만드는게 가능해진다.
따라서 이런 컴포넌트 혹은 유닛 즉, 프로그래밍에서 가장 작은 단위인 함수 테스트유닛 테스트라고 한다.

사소한 함수를 제외하고는 모든 함수에 유닛 테스트를 해야한다.

Assertion

assertion은 역설이라는 뜻이다.
유닛 테스트는 이런 역설이라는 개념으로 이루어져 있다.
특정 환경에서 주어진 값이 옳은지 여부를 확인하기 위해 assertion을 사용한다.

콘솔을 사용한 유닛테스트 보다는 assertion을 기반으로 한 프레임워크를 사용하는게 더 바람직하다.

assertion은 유닛테스트가 아니다.

프로그램 역할이 ture or false 인지 확인하는 주장으로 이루어진 문장이다.
따라서 assertion을 만들기 위해서는 input value, expected value 등의 기본적인 구성이 필요하다.

따라서 이러한 세팅도 테스트의 일부라고 할 수 있다.

항상 함수에 대한 테스트 작성을 할 때는 그 기능을 충실히 이행할 수 있도록 가능한 모든 범주에서 성공, 실패를 찾아야한다.

테스트할 코드는 절대로 테스트를 진행하는 코드 안에 넣으면 안된다..!

각 테스트는 단순히 input 값을 제공하고 assertion을 통해 expection 값을 반환하는 역할을 가지고 있다.

0개의 댓글