테스트코드에 관하여
TDD
TDD는 다음 개발과정을 얘기한다.
- 테스트를 작성한다. (테스트 실패)
- 코드를 작성한다. (테스트성공)
- 리팩토링한다.
리팩토링 과정은 TDD의 핵심이라고 볼 수 있는데, 리팩토링을 통해 테스트코드가 가지는 의존성을 최소화하는데 집중한다.
목표
TDD를 통한 목표는 테스트로 개발을 이끌어가는 것이다. 이를 통해 다음의 이점을 가질 수 있다.
- 버그에 대한 두려움을 상쇄시킨다.
- 더 좋은 코드에 대해 생각하게 된다.
- 동작하는 문서를 만들 수 있다.
- 개발 방향을 잡아준다.
원칙
엉클밥의 TDD원칙
- 실패하는 테스트를 작성하기 전에는 절대로 제품 코드를 작성하지 않는다.
- 실패하는 테스트 코드를 한 번에 하나 이상 작성하지 않는다.
- 현재 실패하고 있는 테스트를 통과하기에 충분한 정도를 넘어서는 제품 코드를 작성하지 않는다.
로버트 마틴의 TDD원칙
- 유닛테스트를 통과할 목적이 아니라면 프로덕션 코드를 작성할 수 없다.
- 유닛테스트가 실패한다면 더 이상 테스트코드를 작성할 수 없다.
- 실패한 유닛테스트를 통과하게 만든다면, 더 이상 프로덕션 코드를 작성할 수 없다.
FIRST 원칙
- Fase : 느린것에 대한 의존성 낮추기, Mock이나 stub을 사용하여 파일, 데이터베이스, 네트워크 같은 것들에 대한 의존성을 낮춘다.
- Isolated : 최소한의 유닛으로 검증하기, 하나의 테스트는 하나의 기능을 집중적으로 테스트
- Repeatable : 언제는 실패, 언제는 성공하는 테스트가 아닌 항상 동일한 결과를 유지할 수 있는 테스트를 작성한다.
- Self-Validating : 테스트 코드 내에서 스스로 결과를 검증할 수 있도록 한다.(Jest)
- Timely : 사용자에게 배포되기 이전에 테스트코드를 작성
Jest
구성
Jest는 자바스크립트의 테스트 프레임워크이다.
NodeJS의 TDD강의를 보면 대부분 jest를 사용하고 있고, nestJS에 내장된 테스트 프레임워크도 jest이다.
npm install --save-dev jest
설치가 끝나면 다음 스크립트를 추가해서 npm run test
로 테스트가 동작되도록 한다.
{
"scripts": {
"test": "jest"
}
}
그리고 jest --init
으로 jest의 기본 구성파일을 생성한다.
사용
test.js파일을 만들어서 다음 코드를 작성한다.
test('two plus two is four', () => {
expect(2 + 2).toBe(4);
});
그리고 npm run test
를 명령하면 테스트코드가 동작하고 하나의 테스트가 성공했음을 보여준다.
it('객체 필드 값 확인', () => {
const data = {one: 1};
data['two'] = 2;
expect(data).toEqual({one: 1, two: 2});
});
위 코드는 toBe
를 사용하지 않는다. object의 경우 toBe
를 사용하면 주소를 비교해서 테스트에 실패한다. 이럴 땐 toEqual
을 통해 검사하면 재귀적으로 모든 필드를 검사한다.
jest는 이와 같이 다양한 매처가 있으므로 공식문서에서 확인해서 가장 유용한 것을 사용하도록 한다.
Author And Source
이 문제에 관하여(테스트코드에 관하여), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@c-on/테스트코드에-관하여저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)