작성일 | 2023. 3. 12 |
범위 | Clean Code 도서, Chaper 9. 단위테스트 |
참고 자료 :
groom의 CLEAN CODE JAVASCRIPT
clean-code-typescript 🚿 타입스크립트를 위한 클린코드 - 한글 번역판
TDD의 세 가지 법칙
- 실패하는 단위 테스트를 작성하기 전에는 실제 코드를 작성하지 말라, (단위 테스트가 실패할 때 까지, 즉, 테스트를 극한까지 짜보고 실제로 들어가라)
- 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성하라
- 실패하는 단위테스트를 통과할 정도로만 실제 코드로 작성하라
깨끗한 테스트 코드
테스트 코드에서 가장 중요한 것은 가독성
F I R S T : 명료한 테스트를 위한 규칙
- Fast 테스트는 빈번하게 실행되므로 빨라야 합니다.
- Independent 테스트는 서로 종속적이지 않습니다. 독립적으로 실행하든지 순서 상관없이 모두 실행하든지 동일한 결과가 나와야 합니다.
- Repeatable 테스트는 어떤 환경에서든 반복될 수 있습니다. 테스트가 실패하는데에 이유가 없어야 합니다.
- Self-Validating 테스트는 통과 혹은 실패로 답해야 합니다. 테스트가 통과되었다면 로그 파일을 보며 비교할 필요는 없습니다.
- Timely 단위 테스트는 실제 코드를 작성하기 전에 작성해야 합니다. 실제 코드를 작성한 후에 테스트를 작성한다면, 테스트를 작성하는 것이 너무 고단하게 느껴질 것입니다.
테스트 하나에 하나의 개념을 작성
단일 책임 원칙에 따라, 테스트 하나당 하나의 assert 문을 작성하라
- bad
import { assert } from 'chai';
describe('AwesomeDate', () => {
it('handles date boundaries', () => {
let date: AwesomeDate;
date = new AwesomeDate('1/1/2015');
assert.equal('1/31/2015', date.addDays(30));
date = new AwesomeDate('2/1/2016');
assert.equal('2/29/2016', date.addDays(28));
date = new AwesomeDate('2/1/2015');
assert.equal('3/1/2015', date.addDays(28));
});
});
- good
import { assert } from 'chai';
describe('AwesomeDate', () => {
it('handles 30-day months', () => {
const date = new AwesomeDate('1/1/2015');
assert.equal('1/31/2015', date.addDays(30));
});
it('handles leap year', () => {
const date = new AwesomeDate('2/1/2016');
assert.equal('2/29/2016', date.addDays(28));
});
it('handles non-leap year', () => {
const date = new AwesomeDate('2/1/2015');
assert.equal('3/1/2015', date.addDays(28));
});
});
1. 테스트의 이름은 테스트의 의도가 드러나야 합니다.
테스트가 실패할 때, 테스트의 이름은 어떤 것이 잘못되었는지 볼 수 있는 첫 번째 표시입니다.
2. 테스트 코드를 대충 작성하면, 코드 양이 늘어날 수록 테스트 코드 관리, 실제 코드에 어려움이 생긴다.
3. 테스트코드의 장점 - 유지보수성, 재사용성, 유연성
: 테스트 코드가 없다면 모든 변경이 잠정적 버그다.
'Programming > 📚 Book Study' 카테고리의 다른 글
[Clean Code] 10. 클래스 (0) | 2023.06.13 |
---|---|
[Clean Code] 6. 객체와 자료구조 (0) | 2023.05.14 |
[Clean Code] 5. 형식맞추기 (code format) (0) | 2023.05.09 |
[Clean Code] 3. 함수 (함수 작성 규칙) (0) | 2023.05.09 |
[Clean Code] 2. 의미있는 이름 (변수명) (0) | 2023.05.09 |