프로젝트 준비 9일차

윤건호·2022년 9월 10일
0

TDD / Jest

목록 보기
1/4

어제 소개한 TDD(테스트 주도 개발)

개발 전에 테스트코드를 먼저 작성하는 개발 방식

테스트코드에 대한 개념이 처음이기때문에 상세하게 정리하도록 하겠다.

테스트코드의 구조

  1. beforeEach (각각의 테스트가 실행되기 전에 호출되는)
    : 테스트 실행 시 반복적으로 사용되는 코드가 있다면 변수에 할당해서 사용한다.
    그때 사용할 수 있다
    예시.

    beforeEach(() => {
    cal = new Calculator();
    });

그리고 beforeAll이 있다(딱 한번만 호출되는)

  1. a Test 안에서는
    준비 과정 (Arrange 또는 Given)

무언가가 주어졌을 때 테스트에 필요한 데이터를 준비하는 단계

Given 핵심 !!
준비 과정을 여러개의 테스트를 거쳐서 반복적으로 사용하고 있다면,
준비 과정을 재사용 할 수 있도록 유틸리티 함수로 따로 정의해서 쓰는게 좋다.

실행 Act When 코드가 이렇게 실행이 될 때
: 테스트 코드 확인

When 핵심 !!
: 의도적으로 실패를 해보기
버그를 수정할 때 실패하는 코드를 먼저 만들어본 후에
이런 상황에 발생하는구나를 먼저 검증하고 버그를 검증해서 성공할 수 있게 한다.

검증 Assert. Then (이렇게 예상을 한다.)
: 그러면 이렇게 조건이 맞아야한다 하는 결과값을 확인하는 단계

Then 핵심 !!
: 가장 마지막에 하는거임
하나의 테스트코드 안에서 너무 여러가지를 테스트하려고 하진 않는지 
고려해 볼 필요가 있음





그리고 테스트코드가 실행이 된 다음에 실행되는
3. After가 있다.

좋은 테스트란 ?

1. 느린 것에 대한 의존성 낮추기

테스트코드에서 파일을 읽거나, 데이터베이스에 접근하거나,
네트워크를 사용한다면, 이건 테스트코드를 느리게 만들 수 있다.
네트워크에 의존하게 되고, 테스트코드가 불안정하게 된다.

즉 코드를 느려지게 하는 것들에 의존하면 안된다.

의존성을 낮추려면 ?

mock , stub 을 사용하기

mock :
실제 객체를 만들어 사용하기에
시간, 비용 등의 Cost가 높거나 혹은 객체 서로간의 의존성이 강해 구현하기
힘들 경우 가짜 객체를 만들어 사용하는 방법이다

stub :
메소드 스텁 혹은 간단히 말해 스텁은 소프트웨어 개발에 쓰이고
다른 프로그래밍 기능을 대리하는 코드이다.
stub은 기존 코드를 흉내내거나
아직 개발되지 않은 코드를 임시로 대치하는 역할을 수행한다.

2. 최소한의 단위 , 유닛으로 검증하기

테스트 코드를 공부하면서 느낀 건 말하고자 하는 부분들이 다 비슷하다.
2-1 하나의 테스트 코드 안에서 여러 개를 검사하려고 하진 않는지.
2-2 충분한 상황을 고려해서 작성했는지.
2-3 의존하는 코드는 아닌지.
이 외에도 비슷한 부분들을 표현하고 있다.

말 자체가 어렵다면 2번같은 경우엔
전체 코드를 한번에 다 테스트 하려고 한다면
어떨지에 대한 생각을 해보면 이해가 바로 될 것 같다.

3. 반복이 가능하도록 만들자

기본적으로 테스트 코드는 실행 시 마다 동일한 결과를 내뱉어야한다.

그럼 실행 시 마다 다른 결과가 나온다는 건 무엇인가 ?
테스트 코드 자체로만 실행되는게 아니라 다른 코드에 의존해서 동작할 때,
외부 환경에서 어떠한 데이터를 받아와서 동작할 때 등
실행 시 마다 달라지는 코드를 작성해선 안된다.

4. 스스로 결과를 검증하기

테스트코드 내부에서 스스로 성공 / 실패를 검증해서 결과를 리포트해야한다.
요즘엔 Jest 사용

자동화를 통한 검증 단계 (CI/CD)

유닛 테스트 (Jest)

Test Runner : 테스트를 실행한 후 결과를 생성한다.

Assertion 코드 안에서 조건과 비교를 통한 테스트 로직을 작성하는걸 말함

이 두개를 동시에 하는 라이브러리가 JEST임

> Jest 란 ?

자바스크립트 환경에서 심플하게 테스트를 할 수 있는 프레임 워크

Babel , TypeScript Node react 환경 모두 사용 가능

오늘 한 마디 :
여태 나의 벨로그 감성과 맞지 않게 길고 공식문서같은 내용이 많다.
프로그래밍의 세계는 끝이 없는거 같다.
모르는 부분이 많아서 새롭고 흥미롭다.

profile
더 배우고 싶은 프론트엔드 개발자 윤건호입니다.

0개의 댓글