洪民憙 (홍민희) 블로그

이하의 글은 2012년에 쓴 것입니다. 오래된 글인 만큼, 현재의 생각과 전혀 다른 내용도 많이 포함되어 있고, 당시와는 상황이 많이 달라진 점도 있습니다. 또한, 그 당시에 잘못 알려졌던 정보도 포함되어 있을 수 있습니다. 어찌됐든 저는 제 오래된 글이 회자되는 것을 저어합니다. 읽기에 앞서 양해를 부탁드립니다.

Python 표준 라이브러리에 들어있는 테스트 도구 중에 doctest라는 것이 있다. 문서를 보면 자세히 설명되어 있는데, 간단히 핵심적인 아이디어만 소개하자면 이렇다: 문서의 예제 코드를 테스트 코드로 삼자.

나는 이 모듈을 매우 좋아하여 제한적으로나마 쓸 수 있는 상황에서 최대한 써오곤 했는데, 사실 이 모듈의 아이디어에는 테스트 철학 상의 치명적인 약점이 하나 있다. 모범적인 테스트는 그 코드가 제대로 작동하지 않을 법한 케이스를 따져보는 반면(falsifying), 모범적인 예제 코드는 그 코드가 기대되로 가장 잘 작동할만한 케이스를 소개한다. 따라서 예제 코드를 테스트 코드로 여기기 시작하면 둘 중 하나의 결과가 나오게 된다. 예제 코드가 모범적(exemplary)이지 않게 되거나, 허투로 테스트하게 된다.

그러므로 doctest는 사용자가 따라할 예제 코드에 행여나 실수가 있지 않을지 검사하는 정도만 기대하는 것이 좋다. 테스트를 하려면 테스팅 라이브러리를 쓰자.