테스트 코드의 가치
- 버그를 찾는 시간을 줄여준다.
- 테스트 자동화를 하면 테스트 코드를 작성하는 지루함은 줄이면서, 테스트 코드의 장점을 가져갈 수 있다.
TDD
- 켄드 벡이 창시한 기법.
- (처음에는 통과하지 못할) 테스트를 작성하고, 이 테스트를 통과하게끔 코드를 작성하고, 결과 코드를 최대한 깔끔하게 리팩터링하는 과정을 짧은 주기로 반복한다.
- 테스트-코딩-리팩터링 과정을 한 시간에도 여러 차례 진행하기 때문에 코드를 대단히 생산적이면서도 차분하게 작성할 수 있다.
JS로 테스트 코드 작성하는 방법
잘못될까봐 가장 걱정되는 영역을 집중적으로 테스트하자. 단순히 읽고 쓰기만 하는 접근자는 테스트할 필요가 없다.
- 제대로 계산하는지.
- 실패할 상황도 테스트하기.
- 자주 테스트하기. 몇 분 간격으로, 적어도 하루에 한 번.
- 불변임이 확실한 픽스처는 공유하기도 한다. 그래도 가장 선호하는 방식은 매번 새로운 픽스처를 만드는 것이다.
describe('provide', function() { const asia= new Province(sampleProvinceData()); // 이렇게 하면 안 된다. it('shortfall', function() { expect(asia.shortfall).equal(5); }); if('profit', function() { expect(asia.profit).equal(230); }); });
describe('provide', function() { let asia; beforeEach(function() { asia = new Province(sampleProvinceData()); }); it('shortfall', function() { expect(asia.shortfall).equal(5); }); if('profit', function() { expect(asia.profit).equal(230); }); });
- 세터는 보통 단순하여 버그가 생길 일이 없어 테스트를 잘 하지 않지만 복잡한 동작을 수행한다면 테스트해볼 만 함.
- 경계 조건 검사하기.
- 컬렉션이 비었을 때 어떤 일이 일어나는지 확인하기.
- 숫자형이라면 0일 때를 검사해보기.
- 음수 넣어보기.
용어
픽스쳐 (Fixture) : 고정 설치된 물건이라는 뜻처럼, 테스트 케이스 실행 전후에 항상 실행하는 함수를 의미합니다. 실제로는, 테스트 함수를 실행하기 위해 필요한 환경을 미리 구축하거나(setup) 실행 후 리소스를 정리하는(teardown) 함수, 그리고 이와 함께 사용되는 사용자 데이터(data)로 구성됩니다. 참고로, GLib에서는 각 테스트간 의존성을 피하기 위해 모든 테스트 케이스를 실행할때마다 매번 픽스쳐를 새로 구성하는 방식(fresh fixture)을 사용합니다.