doctestを使ってみる

30分プログラム、その209。doctestを使ってみる。なかなか素敵。
doctestは関数のドキュメンテーション文字列に実行例を埋め込むと、それを自動でテストしてくれる。unittestよりも読みやすいと思う。

def fact(n):
    """>>> fact(6)
    120
    """
    ....

これだけだったら単純でいいんだけど、いくつか気になることが。たぶん次あたりの30分プログラムで調べる。

使い方

$ python dtest.py -v
Trying:
    fact(3)
Expecting:
    6
ok
Trying:
    fact(4)
Expecting:
    24
ok
1 items had no tests:
    __main__
1 items passed all tests:
   2 tests in __main__.fact
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

ソースコード

お題は階乗計算。evalを使った階乗は、昔どこかの日記のコメント欄で見て感動したことがある。

#! /usr/bin/python
# -*- mode:python; coding:utf-8 -*-
#
# dtest.py -
#
# Copyright(C) 2007 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2007/12/29 22:59:04
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#

def fact(n):
    """
    >>> fact(3)
    6

    >>> fact(4)
    24
    """
    return eval("*".join(map(str,range(1,n+1))))

import doctest
doctest.testmod()

追記

__doc__ - 西尾泰和のはてなダイアリーによると、ドキュメンテーション文字列は

>>> fact.__doc__
'>>> fact(3)
6

>>> fact(4)
24'

とするとこで取得できるそうです。ありがとうございます。