23.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()は引数としてTestCaseTestSuiteオブジェク トを受け取り、テスト結果を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.



ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。