TIL

2020-06-02 TDD 입문

Hoon1994 2020. 6. 2. 22:42

# TDD

 

TDD, 개발할 때 TDD 방식으로 하면 정말 장점이 많다는 말을 많이 들었다. 

평소에 관심만 가지다가, 회사에서 동료분들과 스터디를 할 기회가 생겼고, 매주 프로그래머스의 

문제를 하나씩 테스트 코드를 작성하여 풀어보기로 했다.

 

예전에 JEST로 테스트 코드를 맛보기(?) 정도로 작성했던 적이 있지만, 정확한 사용법은 알지 못 했다.

이번에야 말로 확실히 TDD의 개념을 잡아보려 마음먹었다.

 

TDD는 순환 방식으로 진행한다. 

 

Test fail -> Test Success -> Refactoring

 

먼저 테스트 코드를 작성해서 fail 시킨 후, 작성한 테스트 코드에 통과하기 위한 함수를 작성한다.

테스트에 통과하면, 해당 함수를 리팩토링한다.

 

리팩토링 기준은 아래의 기준으로 잡고 진행하려고 한다.

 

1. indent를 줄인다

2. 메소드는 한가지 일만 하게 한다.

3. else 예약어를 사용하지 않는다.

4. if를 최대한 사용하지 않는다.

 

오늘은 프로그래머스에서 문제를 하나 가져와 테스트 코드만 작성했다.

 

문제는 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수를 완성하는 것이다.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴하는 함수다. 

 

import { solution } from "./두 정수 사이의 합";

describe("solution test", () => {
  it("test", () => {
    expect(solution(3, 5)).toEqual(12);
  });
});

 

먼저 테스트 코드를 작성했다. 3, 5를 넘기면 3 + 4 + 5 = 12이기에, toEqual(12)의 결과가 와야한다. 

처음엔 테스트 코드만 먼저 작성했기 때문에, 당연히 npm run test 하면 Test fail 이다. 

 

export const solution = (a, b) => {
  let maxNum;
  let minNum;
  let array = [];
  if (a > b) {
    maxNum = a;
    minNum = b;
  }
  if (b > a) {
    maxNum = b;
    minNum = a;
  }
  for (let i = minNum; i <= maxNum; i++) {
    array.push(i);
  }
  return array.reduce((ac, cu) => ac + cu);
};

 

생각나는대로 코드를 작성해봤다. 결과는 Test passed! 

오늘 TDD는 여기까지만 하고, 나머지 시간은 유튜브 클론 토이 프로젝트에 쏟아야겠다.

'TIL' 카테고리의 다른 글

2020-06-18 TIL  (0) 2020.06.18
2020-06-17 Node.js & MongoDB  (0) 2020.06.17
2020-06-09 TDD  (0) 2020.06.09
2020-06-04 TDD & NodeJs  (0) 2020.06.04
2020-06-03 TDD Refactoring & Passport  (0) 2020.06.03