doctestを使ってみる
30分プログラム、その209。doctestを使ってみる。なかなか素敵。
doctestは関数のドキュメンテーション文字列に実行例を埋め込むと、それを自動でテストしてくれる。unittestよりも読みやすいと思う。
def fact(n): """>>> fact(6) 120 """ ....
これだけだったら単純でいいんだけど、いくつか気になることが。たぶん次あたりの30分プログラムで調べる。
- 普通のプログラムからドキュメンテーション文字列を取得する方法はあるのかな?
- 特定ディレクトリ以下のモジュールをまとめてテストしたい。たぶんdoctest.DocTestSuiteを使うんだろう
使い方
$ 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'
とするとこで取得できるそうです。ありがとうございます。