이하의 글은 2012년에 쓴 것입니다. 오래된 글인 만큼, 현재의 생각과 전혀 다른 내용도 많이 포함되어 있고, 당시와는 상황이 많이 달라진 점도 있습니다. 또한, 그 당시에 잘못 알려졌던 정보도 포함되어 있을 수 있습니다. 어찌됐든 저는 제 오래된 글이 회자되는 것을 저어합니다. 읽기에 앞서 양해를 부탁드립니다.
Python 표준 라이브러리에 들어있는 테스트 도구 중에 doctest
라는 것이 있다. 문서를 보면 자세히 설명되어 있는데, 간단히 핵심적인 아이디어만 소개하자면 이렇다: 문서의 예제 코드를 테스트 코드로 삼자.
나는 이 모듈을 매우 좋아하여 제한적으로나마 쓸 수 있는 상황에서 최대한 써오곤 했는데, 사실 이 모듈의 아이디어에는 테스트 철학 상의 치명적인 약점이 하나 있다. 모범적인 테스트는 그 코드가 제대로 작동하지 않을 법한 케이스를 따져보는 반면(falsifying), 모범적인 예제 코드는 그 코드가 기대되로 가장 잘 작동할만한 케이스를 소개한다. 따라서 예제 코드를 테스트 코드로 여기기 시작하면 둘 중 하나의 결과가 나오게 된다. 예제 코드가 모범적(exemplary)이지 않게 되거나, 허투로 테스트하게 된다.
그러므로 doctest
는 사용자가 따라할 예제 코드에 행여나 실수가 있지 않을지 검사하는 정도만 기대하는 것이 좋다. 테스트를 하려면 테스팅 라이브러리를 쓰자.