.. highlight:: rest
このSphinx拡張を使用すると、自然な形で、ドキュメント内で簡単なテストを行えるようになります。特別なマークアップのされたコードブロックを収集して、doctestとしてテストを行います。
ひとつのドキュメント内で、テストコードをグループという形で分けることができます。それぞれのグループは以下のものを含みます。
doctestビルダーを使用してドキュメントをビルドすると、それぞれのドキュメントごとに同一グループの要素が集められて次々に実行されます。最初はセットアップコードブロックが実行され、その後はファイルの中で登場する順番にテストブロックが実行されます。
テストブロックには以下の2種類あります:
doctest拡張は4つのディレクティブを提供します。 グループ引数は以下のように解釈されます:
doctestスタイルのコードブロックです。標準の docteset のフラグを使用すると、ユーザが指定した理想の出力と、実際に出力したものをどのように比較するのか、というのを制御することができます。以下のオプションが使用できます:
ELLIPSIS
省略記号(...)を期待される出力の中に書くことができます。どのような結果が来てもマッチします。
IGNORE_EXCEPTION_DETAIL
例外の詳細を省略して比較します。トレースバックの詳細までは比較しないようになります。
DONT_ACCEPT_TRUE_FOR_1
デフォルトでは、実際の出力が”True”で、理想の結果が”1”となっていた場合、デフォルトではこれもテスト成功とみなします。Python 2.2以前の名残です。
このディレクティブは以下の二つのオプションをサポートしています:
標準ライブラリのdoctestでは、予想出力の中に空行を入れたい場合には<BLANKLINE>というキーワードを指定しなければなりませんでした。<BLANKLINE>はHTMLやLaTeXなど、人が読める出力を行うビルドの際には削除されます。
doctestの中で書くのと同様に、インラインでdoctestのオプションを指定することもできます。
>>> datetime.date.now()
datetime.date(2008, 1, 1)
これらのオプションは、テストの実行時には識別されますが、HTMLなどの出力の際には削除されます。
コード-出力タイプのテストのコードブロックです。
このディレクティブは以下のオプションをサポートしています:
最後に定義された testcode ブロックに対応する出力を定義します。
このディレクティブは以下の2つのオプションをサポートしています:
サンプル:
.. testoutput::
:hide:
:options: -ELLIPSIS, +NORMALIZE_WHITESPACE
出力テキスト.
以下のコードはこれらのディレクティブの使用方法のサンプルです。 doctest を使用したテストと、 testcode および testoutput の二つで構成されたテストは完全に等価です.
オウムモジュール
================
.. testsetup:: *
import parrot
parrotモジュールはオウムに関するモジュールです
Doctest例:
.. doctest::
>>> parrot.voom(3000)
This parrot wouldn't voom if you put 3000 volts through it!
テスト出力例:
.. testcode::
parrot.voom(3000)
この出力は以下のようになります:
.. testoutput::
This parrot wouldn't voom if you put 3000 volts through it!
doctest拡張の動作をカスタマイズする設定がいくつかあります:
Pythonコードを記述します。このコードはテストされるすべてのファイルのtestsetupディレクティブに書き込んだのと同じように扱われます。例えば、doctest時にいつでも必要となるモジュールをimportするといった用途に使用できます。
バージョン 0.6 で追加.
この値に空でない文字列(デフォルトは'default')が設定されると、標準のreSTのdoctestブロックもテストされるようになります。それらのテストには、ここで与えられたグループ名が設定されます。
reSTのdoctestブロックは、reSTの中のパラグラフとして単純にdoctestが置かれます:
何かドキュメント.
>>> print 1
1
追加の何かドキュメント.
reSTの場合は、ブロックを表現するのに特別な::は不要です。docutilsは>>>から始まる行を識別します。そのため、doctestのために追加でインデントを設定する必要はありません。
この設定値がデフォルトのままであったとすると、上記のコード片は、下記のように書いた場合と同じようにdoctestビルダーから解釈されます:
何かドキュメント.
.. doctest::
>>> print 1
1
追加の何かドキュメント.
この機能があるおかげで autodoc 拡張を使用して取り込んだdocstring中のdoctestを簡単に実行することができます。特別なディレクティブでマークアップする必要はありません。
reSTのdoctestブロックでは空白行はパラグラフの境界として使用されるため、そのままでは結果として空行を記述することはできません。削除された<BLANKLINE>と# doctest:は、 doctest ブロック内でのみ動作します。