開発ツール
**********

この章で紹介されるモジュールはソフトウェアを書くことを支援します。たと
えば、 "pydoc" モジュールはモジュールの内容からドキュメントを生成しま
す。 "doctest" と "unittest" モジュールでは、自動的に実行して予想通り
の出力が生成されるか確認するユニットテストを書くことができます。

この章で解説されるモジュールのリスト:

* "typing" --- 型ヒントのサポート

  * Python 型システムの仕様

  * 型エイリアス

  * NewType

  * 呼び出し可能オブジェクトのアノテーション

  * ジェネリクス

  * タプルのアノテーション

  * クラスオブジェクトの型

  * ジェネレータとコルーチンのアノテーション

  * ユーザー定義のジェネリック型

  * "Any" 型

  * 名前的部分型 vs 構造的部分型

  * モジュールの内容

    * 特殊型付けプリミティブ

      * 特殊型

      * 特殊形式

      * ジェネリック型と型エイリアスの構築

      * その他の特殊な指示

    * プロトコル

    * 入出力を扱うための抽象基底クラスとプロトコル

    * 関数とデコレータ

    * イントロスペクション用のヘルパー

    * 定数

    * 非推奨のエイリアス

      * 組み込み型のエイリアス

      * "collections" の型のエイリアス

      * その他の具象型のエイリアス

      * "collections.abc" のコンテナ抽象基底クラスのエイリアス

      * "collections.abc" の非同期処理用の抽象基底クラスのエイリアス

      * "collections.abc" のその他の抽象基底クラスのエイリアス

      * "contextlib" の抽象基底クラスのエイリアス

  * メジャーな機能の非推奨時系列

* "pydoc" --- ドキュメント生成とオンラインヘルプシステム

* Python 開発モード

  * Python 開発モードの影響

  * ResourceWarning の例

  * Bad file descriptor エラーの例

* "doctest" --- 対話型の Python の例をテストする

  * 簡単な利用法: docstring 中の実行例をチェックする

  * 簡単な利用法: テキストファイル中の実行例をチェックする

  * コマンドラインでの使用

  * doctest のからくり

    * どの docstring が検証されるのか?

    * docstring 内の実行例をどのように認識するのか?

    * 実行コンテキストとは何か?

    * 例外はどう扱えばよいか?

    * オプションフラグ

    * ディレクティブ (Directives)

    * 警告

  * 基本 API

  * 単体テスト API

  * 拡張 API

    * DocTest オブジェクト

    * Example オブジェクト

    * DocTestFinder オブジェクト

    * DocTestParser オブジェクト

    * TestResults オブジェクト

    * DocTestRunner オブジェクト

    * OutputChecker オブジェクト

  * デバッグ

  * アドバイス

* "unittest" --- ユニットテストフレームワーク

  * 基本的な例

  * コマンドラインインターフェイス

    * コマンドラインオプション

  * テストディスカバリ

  * テストコードの構成

  * 既存テストコードの再利用

  * テストのスキップと予期された失敗

  * サブテストを利用して繰り返しテストの区別を付ける

  * クラスと関数

    * テストクラス

    * テストのグループ化

    * テストのロードと起動

      * load_tests プロトコル

  * クラスとモジュールのフィクスチャ

    * setUpClass と tearDownClass

    * setUpModule と tearDownModule

  * シグナルハンドリング

* "unittest.mock" --- モックオブジェクトライブラリ

  * クイックガイド

  * Mock クラス

    * 呼び出し

    * 属性の削除

    * Mock の名前と name 属性

    * 属性として設定されるモック

  * patcher

    * patch

    * patch.object

    * patch.dict

    * patch.multiple

    * patch のメソッド: start と stop

    * ビルトインをパッチする

    * TEST_PREFIX

    * patch デコレータをネストする

    * どこにパッチするか

    * デスクリプタやプロキシオブジェクトにパッチする

  * MagicMock と magic method のサポート

    * Magic Method をモックする

    * Magic Mock

  * ヘルパー

    * sentinel

    * DEFAULT

    * call

    * create_autospec

    * ANY

    * FILTER_DIR

    * mock_open

    * autospec を使う

    * モックの封印

  * "side_effect"、"return_value"、*wraps* の優先順位

* "unittest.mock" --- 入門

  * Mock を使う

    * モックでメソッドにパッチを当てる

    * オブジェクトのメソッド呼び出しにモックを使う

    * クラスをモックする

    * モックに名前をつける

    * すべての呼び出しを追跡する

    * 戻り値と属性を設定する

    * モックから例外を発生させる

    * side_effect の関数と iterable

    * 非同期イテレータをモックする

    * 非同期コンテキストマネージャをモックする

    * 既存のオブジェクトからモックを作る

    * side_effect でファイルごとに異なる内容を返す

  * patch デコレータ

  * さらに詳しい例

    * chained call をモックする

    * 部分的なモック

    * ジェネレータメソッドをモックする

    * 同じパッチを全てのメソッドに適用する

    * 束縛されていないメソッドをモックする

    * モックで複数回の呼び出しをチェックする

    * ミュータブルな引数に対処する

    * パッチの入れ子

    * MagicMock で辞書をモックする

    * Mock のサブクラスと属性

    * patch.dict で import をモックする

    * 呼び出し順序の追跡と簡潔な呼び出しのアサート

    * より複雑な引数の照合

* "test" --- Python の回帰テストパッケージ

  * "test" パッケージの単体テストを書く

  * コマンドラインインターフェースを利用してテストを実行する

* "test.support" --- Python テストスイート用のユーティリティ

* "test.support.socket_helper" --- ソケットのテスト用ユーティリティ

* "test.support.script_helper" --- Python の実行テスト用ユーティリティ

* "test.support.bytecode_helper" --- 正しいバイトコード生成をテストす
  るための支援ツール

* "test.support.threading_helper" --- スレッドのテスト用ユーティリティ

* "test.support.os_helper" --- os のテスト用ユーティリティ

* "test.support.import_helper" --- インポートのテスト用ユーティリティ

* "test.support.warnings_helper" --- 警告のテスト用ユーティリティ
