[僕] doctest でテストを書く

僕ト云フ事

たろマークはてなブックマーク

2011年02月21日

[python] doctest でテストを書く

README.txt に reST でパッケージの概要を書く


=================
atomisator.parser
=================
 
parser が提供する最上位関数 'parse' を使い、フィードからコンテンツを取得します。
 
    >>> import os
    >>> from atomisator.parser import parse
 
この館数は、フィード URL を引数に取り、取得したコンテンツをイテレータとして返します。
2つめのパラメータには取得する最大エントリ数を指定できます。
最大エントリ数を指定しなかった場合、最大10件まで取得します::
 
    >>> res = parse(os.path.join(os.path.dirname(__file__), 'sample.xml'))
    >>> res #doctest: +ELLIPSIS
    <itertools.islice ...>
 
イテレータの各要素はエントリの情報を含む辞書型の値となります。::
 
    >>> entry = res.next()
    >>> entry['title']
    u'CSSEdit 2.0 Released'
 
辞書には以下のキーが格納されています::
 
    >>> keys = sorted(entry.keys())
    >>> list(keys)
    ['id', 'link', 'links', 'summary', 'summary_detail', 'tags', 'title', 'title_detail']

このまま ~/Desktop/my_env/bin/nosetests --with-doctest --doctest-extension=.txt とかするとテストがこける。--with-doctest は、doctest も行う指定、--doctest-extension=.txt は、doctest のファイルの拡張子の指定。んで、__init__.py にこのテストが通るようにコードを書く


from feedparser import parse as feedparse
from itertools import islice
from itertools import imap
 
def _filter_entry(entry):
    """Filters entry field."""
    entry['links'] = [link['href'] for link in entry['links'] ]
    return entry
 
def parse(url, size=10):
    """Returns entries of the feed."""
    result = feedparse(url)
    return islice(imap(_filter_entry, result['entries']), size)

すると、テストが通る。

$ ~/Desktop/my_env/bin/nosetests --with-doctest --doctest-extension=.txt
.
----------------------------------------------------------------------
Ran 1 test in 0.451s

OK

reST で概要書いたらそれがそのままテストになるのは面白いなー。
nose は unittest の機能を提供しているパッケージらしい。エキスパート Python プログラミング、6章読んだら、11章読もうかなぁ。

エキスパートPythonプログラミング
Tarek Ziade
アスキー・メディアワークス
売り上げランキング: 9716
blog comments powered by Disqus