##
9 拡張 API

基本 API は、 doctest を使いやすくするための簡単なラッパであり、 柔軟性があってほとんどのユーザの必要を満たしています; とはいえ、 もっとテストをきめ細かに制御したい場合や、 doctest の機能を 拡張したい場合、拡張 API (advanced API) を使わねばなりません。

拡張 API は、doctest ケースから抽出した対話モードでの例題を 記憶するための二つのコンテナクラスを中心に構成されています:

- `Example`: 一つの Python 実行文と、その予想出力をペアに したもの。
- `DocTest`: `Example` の集まり。通常一つの docstring や テキストファイルから抽出されます。

その他に、 doctest の例題を検索、パーズ、実行、チェックするための 処理クラスが以下のように定義されています:

- `DocTestFinder`: 与えられたモジュールから全ての docstring を検索し、対話モードでの例題が入った各 docstring から `DocTestParser` を使って`DocTest` を生成します。
- `DocTestParser`: (オブジェクトにつけられた docstring のような) 文字列から`DocTest` オブジェクトを生成します。
- `DocTestRunner`: `DocTest` 内の例題を実行し、 `OutputChecker` を使って出力を検証します。
- `OutputChecker`: doctest 例題から実際に出力された結果を 予想出力と比較し、両者が一致するか判別します。

これらの処理クラスの関係を図にまとめると、以下のようになります:

                                list of:
    +------+                   +---------+
    |module| --DocTestFinder-> | DocTest | --DocTestRunner-> results
    +------+    |        ^     +---------+     |       ^    (printed)
                |        |     | Example |     |       |
                v        |     |   ...   |     v       |
               DocTestParser   | Example |   OutputChecker
                               +---------+