| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Key 종류
- latent factor
- 무결성유지
- latent factor model
- 문자열
- sklearn
- 세대별가비지컬렉터
- 무결성
- 컨테이너객체
- 파이썬
- SQL
- 잠재요소모델
- 사이킷런
- 무결성유지메커니즘
- 주성분 찾기
- RENAMETABLE
- Hyperlink Graphs
- 클린코드
- 알고리즘
- DROPTABLE
- TDD
- CREATETABLE
- SQLDDL
- knn_classify
- ALTERTABLE
- 힙
- 붓꽃데이터셋
- Python
- 키 종류
- 백준
- Today
- Total
DonHurry
[TDD] 유용한 개념들 본문
Best Practices in Testing
Ensuring test isolation and managing global state
각각의 테스트는 다른 테스트에 영향을 주어서는 안된다. 테스트가 끝날 때마다 영구적인 상태를 초기화해야 한다. 예를 들어 장고의 manage.py를 활용하여 test를 돌릴 경우 실제 DB가 아닌 test DB를 임시로 생성하고, 각 테스트 사이에 초기화를 진행해준다. 실제로 test를 진행한 후 마지막에 아래와 같은 메시지를 볼 수 있다.
Destroying test database for alias 'default'...
Avoid "voodoo" sleeps
무언가 로드되는 것을 기다릴 때, 종종 간단한 time.sleep을 사용하게 된다. 문제는 기다리는 시간을 너무 짧게 설정해서 가짜 실패에 취약하게 되거나, 너무 길게 설정해서 테스트 실행을 느리게 할 수도 있다. 이를 해결하기 위한 방식 중 하나로 while-try-except 구문을 통해 루프 내에서 일정 시간 동안 빠르게 재시도하는 방식도 있다.
* 여기서 voodoo의 뜻은 문제의 근본 원인을 해결하는 대신, 일시적이고 불확실한 해결책으로 사용하는 것을 뜻한다. 다시 말해 명확한 이해나 논리적 근거 없이 사용하는 것이다.
Don't rely on Selenium's implicit waits
기능 테스트를 위해 selenium을 자주 이용하는데, selenium의 경우 이론적으로 암시적 대기를 수행한다. 그러나 각 브라우저마다 구현이 다르고, 항상 신뢰할 수는 없다. Zen of Python이 이야기하는 것처럼, 명시적인 것이 암시적인 것보다 낫다. 따라서 대기할 필요가 있는 경우 명시적인 대기를 선호하자.
Useful TDD Concepts
Regression
코드 변경으로 인해 이전에 잘 작동하던 애플리케이션의 특정 부분이 예기치 않게 동작하는 현상.
Unexpected failure
테스트가 예상치 못한 방식으로 실패했을 때. 이는 테스트에 오류가 있거나, regression이 있다는 뜻이므로 코드 수정이 필요하다.
Triangulation
기존 코드에 구체적인 테스트 케이스를 추가하는 것.
Three strikes and refactor
중복 코드를 언제 제거할 지에 대한 고민에 필요하다. 두 개의 코드가 비슷하다면, 일단 세 번째로 사용하기 전에는 기다린다. 만약 세 번째 동일한 코드를 사용한다면, 코드 재사용 혹은 리팩터링이 가능한 지 확신을 가질 수 있게 된다.
The scratchpad to-do list
개발을 할 때는 우선순위도 중요하다. 미루어 둔 작업을 잊지 않도록 메모하는 습관을 들이자.
Reference
클린 코드를 위한 테스트 주도 개발 (비제이퍼블릭, 2015)
'TDD' 카테고리의 다른 글
| [TDD] 프로세스 (0) | 2024.01.12 |
|---|