doctest では、doctest 例題をデバッグするメカニズムをいくつか 提供しています:
""" >>> def f(x): ... g(x*2) >>> def g(x): ... print x+3 ... import pdb; pdb.set_trace() >>> f(3) 9 """
対話セッションは以下のようになるでしょう:
>>> import a, doctest >>> doctest.testmod(a) --Return-- > <doctest a[1]>(3)g()->None -> import pdb; pdb.set_trace() (Pdb) list 1 def g(x): 2 print x+3 3 -> import pdb; pdb.set_trace() [EOF] (Pdb) print x 6 (Pdb) step --Return-- > <doctest a[0]>(2)f()->None -> g(x*2) (Pdb) list 1 def f(x): 2 -> g(x*2) [EOF] (Pdb) print x 3 (Pdb) step --Return-- > <doctest a[2]>(1)?()->None -> f(3) (Pdb) cont (0, 3) >>>
バージョン 2.4 で 変更 された仕様:
pdb.set_trace()
を doctest の
中で有効に使えるようになりました
以下は、doctest を Python コードに変換して、できたコードをデバッガ下で 実行できるようにするための関数です:
s) |
引数s は doctest 例題の入った文字列です。この文字列は Python スクリプトに変換され、その中では s の doctest 例題が 通常のコードに、それ以外は Python のコメント文になります。 生成したスクリプトを文字列で返します。例えば、
import doctest print doctest.script_from_examples(r""" Set x and y to 1 and 2. >>> x, y = 1, 2 Print their sum: >>> print x+y 3 """)
は、
# Set x and y to 1 and 2. x, y = 1, 2 # # Print their sum: print x+y # Expected: ## 3
になります。
この関数は他の関数 (下記参照) から使われていまるが、対話セッションを Python スクリプトに変換したいような場合にも便利でしょう。
バージョン 2.4 で 新たに追加 された仕様です。
module, name) |
引数module はモジュールオブジェクトか、対象の doctest を持つ オブジェクトの入ったモジュールのドット表記名です。 引数name は対象の doctest を持つオブジェクトの (モジュール内の) 名前です。対象オブジェクトの docstring を上の script_from_examples() で説明した方法で Python スクリプトに 変換してできた文字列を返しますます。例えば、a.py モジュールの トップレベルに関数 f() がある場合、以下のコード
import a, doctest print doctest.testsource(a, "a.f")
を実行すると、f() の docstring から doctest をコードに 変換し、それ以外をコメントにしたスクリプトを出力します。
バージョン 2.3 で 新たに追加 された仕様です。
module, name[, pm]) |
module および name 引数は上の testsource() と同じです。指定したオブジェクトの docstring から合成された Python スクリプトは一時ファイルに書き出され、その後 Python デバッガ pdb の制御下で実行されます。
ローカルおよびグローバルの実行コンテキストには、
module.__dict__
の浅いコピーが使われます。
オプション引数pm は、検死デバッグを行うかどうかを指定します。
pm が真の場合、スクリプトファイルは直接実行され、
スクリプトが送出した例外が処理されないまま終了した場合にのみデバッガ
が立ち入ります。その場合、pdb.post_mortem()
によって
検死デバッグを起動し、処理されなかった例外から得られたトレースバック
オブジェクトを渡します。pm を指定しないか値を偽にした場合、
pdb.run()
に適切な execfile() 呼び出しを
渡して、最初からデバッガの下でスクリプトを実行します。
バージョン 2.3 で 新たに追加 された仕様です。
バージョン 2.4 で 変更 された仕様: 引数pm を追加しました
src[, pm][, globs]) |
上のdebug() に似ていますが、doctest の入った文字列は src 引数で直接指定します。
オプション引数 pm は上の debug() と同じ意味です。
オプション引数globs には、ローカルおよびグローバルな
実行コンテキストの両方に使われる辞書を指定します。globs を
指定しない場合やNone
にした場合、空の辞書を使います。
辞書を指定した場合、実際の実行コンテキストには浅いコピーが使われます。
バージョン 2.4 で 新たに追加 された仕様です。
DebugRunner クラス自体やDebugRunner クラスが送出 する特殊な例外は、テストフレームワークの作者にとって非常に興味のある ところで The DebugRunner class, and the special exceptions it may raise, are of most interest to testing framework authors, and will only be sketched here.
詳しくはソースコード、とりわけDebugRunner の docstring (それ自体 doctest ですよ!) を参照してください。
[checker][, verbose][, optionflags]) |
コンストラクタのパラメタやメソッドについては、23.2.9 節の DocTestRunner のドキュメントを参照してください。
DebugRunner インスタンスの送出する例外には以下の二つがあります:
test, example, got) |
test, example, exc_info) |
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。