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

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

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

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

このようなことを実現するために `unittest`では、 テストを以下のような構成で開発します。

Fixture

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

テストケース

  テストケースはテストの最小単位で、各入力に対する結果をチェックしま す。テストケースを作成する場合は、`unittest`が提供する`TestCase`クラス を基底クラスとして利用することができます。

テストスイート

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

テストランナー

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

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

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

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

参考:

`doctest`:モジュール
  Another test-support module with a very different flavor.

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