저는 doctest를 좋아해요. @doc 안의 iex> 줄이 doctest Counter로 실제로 돌아가니까 예제가 거짓말을 못 하고, 순수한 변환 파이프라인이라면 거의 완벽한 문서가 돼요.
그런데 다른 프로세스와 대화하는 코드에서는 조용히 오해를 만들어요. 예제는 Counter.bump(pid)가 {:ok, 1}을 돌려준다고 보여 줘요. 기본값 5000밀리초가 지나 호출이 포기하는 것도, 그 때문에 호출한 쪽이 종료되는 것도, 아무도 기다리지 않는데 서버가 결국 일을 끝내 버리는 것도 보여 줄 수 없어요. 읽는 사람은 성공 값의 모양만 배우고, 문서가 대비시켜 줘야 했던 실패에 대해서는 아무것도 못 배워요.
그래서 저는 나눠요. 입력이 출력을 완전히 정하는 데이터 변환에는 doctest를 써요. 프로세스를 넘나드는 건 글과 진짜 테스트로 다루고, GenServer.call/3은 타임아웃이 나면 호출한 쪽을 종료시키고 일은 저쪽에서 여전히 일어날 수 있다고 분명히 적어요.
더 길어요. 그래도 노드가 느릴 때 사람들이 정말 필요로 하는 건 그 부분이에요.