# 5.3 `unittest` -- 単体テストフレームワーク

バージョン2.1 以降で新規追加された 仕様です。

このPython単体テストフレームワーク は``PyUnit''とも呼ばれ、Kent Beck と Erich GammaによるJUnitのPython版です。JUnitはまたKentのSmalltalk用テスト フレームワークのJava版で、どちらもそれぞれの言語で業界標準の単体テストフ レームワークとなっています。

PyUnitでは、テストの自動化・初期設定と終了処理の共有・テストの分類・テス ト実行と結果レポートの分離などの機能を提供しており、`unittest`の クラスを使って簡単にたくさんのテストを開発できるようになっています。

PyUnitでは、テストを以下のような構成で開発します。

Fixture

  test fixture(テスト設備)とは、テスト実行のために必要な準備や終了処 理を指します。例:テスト用データベースの作成・ディレクトリ・サーバプロセ スの起動など。

テストケース

  テストケースはテストの最小単位で、各入力に対する結果をチェックしま す。PyUnitでは、`TestCase`を基底クラスとしてテストケースを作成しま す。

テストスイート

  テストスイートはテストケースとテストスイートの集まりで、同時に実行 しなければならないテストをまとめる場合に使用します。

テストランナー

  テストランナーはテストの実行と結果表示を管理するコンポーネントで す。ランナーはグラフィカルインターフェースでもテキストインターフェースで も良いですし、何も表示せずにテスト結果を示す値を返すだけの場合もありま す。

PyUnitでは、テストケースとfixtureを、`TestCase`クラスと `FunctionTestCase`クラスで提供しています。`TestCase`クラスは 新規にテストを作成する場合に使用し、`FunctionTestCase`は既存のテス トをPyUnitに組み込む場合に使用します。fixtureの設定処理と終了処理は、 `TestCase`では`setUp()`メソッドと`tearDown()`をオー バーライドして記述し、classFunctionTestCaseでは初期設定・終了処理を行 う既存の関数をコンストラクタで指定します。テスト実行時、まずfixtureの初 期設定が最初に実行されます。初期設定が正常終了した場合、テスト実行後には テスト結果に関わらず終了処理が実行されます。`TestCase`の各インスタ ンスが実行するテストは一つだけで、fixtureは各テストごとに新しく作成され ます。

テストスイートは`TestSuite`クラスで実装されており、複数のテストと テストスイートをまとめる事ができます。テストスイートを実行すると、スイー トと子スイートに追加されている全てのテストが実行されます。

テストランナーは`run()`メソッドを持つオブジェクトで、 `run()`は引数として`TestCase`か`TestSuite`オブジェク トを受け取り、テスト結果を`TestResult`オブジェクトで戻します。 PyUnitではデフォルトでテスト結果を標準エラーに出力する `TextTestRunner`をサンプルとして実装しています。これ以外のランナー (グラフィックインターフェース用など)を実装する場合でも、特定のクラスから 派生する必要はありません。

参考資料:

PyUnit Web Site
  The source for further information on PyUnit.

Simple Smalltalk Testing: With Patterns
  Kent Beck's original paper on testing frameworks using the pattern shared by `unittest`.