jc.jang

TDD with Python 6장 본문

개발/Test-Driven Development with Python

TDD with Python 6장

jangstory 2020. 1. 9. 00:15

기능 테스트 내에서 테스트 격리

기능 테스트를 실행할 때마다 앞 테스트의 목록 아이템이 데이터베이스에 남아있다. 이것은 다시 다음 테스트 결과 해석을 방해하게 된다.

 

LiveServerTestCase라는 클래스를 이용해서 이 문제를 해결할 수 있다. 이것은 자동으로 테스트용 데이터베이스를 생성하고(단위 테스트와 마찬가지로), 기능 테스트를 위한 개발 서버를 가동한다.

필요한 경우에는 최소한의 설계를

TDD는 애자일(Agile) 개발 방법과 밀접한 관련이 있다. 개발 초기 단계에 요구사항 분석과 설계에 많은 시간을 할애하는 것이 전통적인 소프트웨어 공학인데, 이에 상반된 방법론이 애자일이다. 긴 설계 과정 대신에, "동작하는 최소한의 애플리케이션"을 빠르게 만들고, 이를 이용해서 얻은 실제 사용자 의견을 설계에 점진적으로 반영해 가는 방식이다.

YAGNI!

설계에 대해 한번 생각하기 시작하면 생각을 멈추는 것이 쉽지 않다. 하지만 애자일 복음인 YAGNI에 순종해야 한다(야그니라 읽는다). "You ain't gonna need it"(그것을 사용할 일이 없을 것이다)의 약자다. 아이디어가 정말 끝내주더라도 대개는 그걸 사용하지 않고 끝나는 경우가 많다. 오히려 사용하지 않는 코드로 가득 차서 애플리케이션이 복잡해지기도 한다. YAGNI는 창의적이지만 과도한 열정을 억제해주는 경전이라고 할 수 있다.

알아두면 유용한 TDD 개념과 일반적인 법칙

테스트 격리(Test Isolation)와 전역 상태(Global State)

각각의 테스트가 다른 테스트에 영향을 끼쳐서는 안 된다. 이것은 각 테스트 마지막에는 영구적인 상태를 초기화해야 한다는 것을 의미한다. Django의 테스트 실행자는 각 테스트 결과물을 제거해주는 테스트 데이터베이스를 생성함으로써 이 문제를 해결해준다. (19장 참고)

동작 상태 확인 후 다음 동작 상태 확인(다른 말로, 테스팅 고트님 vs. 리팩터링 캣)

일반적으론 모든 것을 한 번에 수정하는 것이 쉽다. 하지만 주의하지 않으면 결국 리팩터링 캣 처지가 돼서(욕조를 빠져 나오지 못하는 고양이처럼) 오히려 많은 코드를 재수정해야 하거나 아무것도 동작하지 않는 상태가 된다. 테스팅 고트님은 우리가 한 단계씩 수정해서 동작하는지 확인 후에 다음 단계로 넘어가도록 격려하고 있다.

 

리팩터링 캣  출처-oreilly

'개발 > Test-Driven Development with Python' 카테고리의 다른 글

TDD with Python 7장  (0) 2020.01.21
TDD with Python 5장  (0) 2019.12.19
TDD with Python 4장  (0) 2019.12.18
TDD with Python 1, 2, 3장  (0) 2019.12.18
Comments