みなさんテストしてますか?
Pythonには沢山の便利でステキなテストツールがあります。標準ライブラリに入っているunittestやアジャイルドキュメンテーションとも呼ばれるdoctestなど,標準の機能だけでもかなり強力なのですが,外部のツールを使うとより快適なテストライフが送れるのです。
python.orgにあるPython testing tools taxonomy(Python用テストツールのまとめ)というページがあり,ここに有益な情報が集まっているので例によって超訳してみました(ユニットテスト関連のみ)。
ツール | カテゴリ | 作者 | ツールが含まれるフレームワークなど | 特徴 |
---|---|---|---|---|
unittest | ユニットテスト | Steve Purcell | Python標準ライブラリ | Pythonで最も古く,よく使われているテスティングフレームワーク。xUnitに慣れた人にはとても使いやすい。 |
unittest2 | ユニットテスト | Michael Foord | Python2.7と3.2に搭載されるunittestの移植版(2.4から2.6でも稼働)。テストを自動的に見つけて実行する機能,強化されたコマンドラインオプション,クラス,tearDown,setUpなどでフィクスチャを共有できる機能などの機能追加。 | |
doctest | ユニットテスト | Tim Peters | Python標準ライブラリ | インタラクティブシェルの実行結果をコピペするテスト。アジャイルドキュメンテーション(英文へのリンク)と呼ばれ,テストがそのまま関数やメソッドの使い方になる。Djangoのアプローチ(英文へのリンク)も参照のこと。 |
py.test | ユニットテスト | Holger Krekel | py.lib | APIを持たないテストフレームワーク。テストの自動探索/実行機能を装備。assertの使い方は簡単で,フィクスチャや状態の管理サポート,デバッガとの連携が強力。 |
nose | unittestの機能拡張 | Jason Pellerin | 広く使われているテスティングフレームワークで,標準ライブラリのunittestの上に作られている。noseはテストを自動的に探してユニットテストを実行する。テストケースを元にしたテストと親和性がよい。沢山のプラグインがあるのも特徴。 | |
TestOOB | unittestの機能拡張 | Ori Peleg | unittestの機能拡張。正規表現やblogを使ってテストのフィルタリングが可能。XMLやHTMLで結果を書き出す機能,出力に色を付ける機能,テストが失敗したときにpdb(デバッガ)を起動する機能,複数スレッド/プロセスでテストを並行実行する機能,冗長なアサート,テストの失敗後すぐに報告を出力する機能,などを持つ。 | |
Trial | unittestの機能拡張 | Jonathan Lange | Twisted | unittestの機能拡張で,Deferredsを使った非同期のテストができる。skipとtodoというリザルトタイプが使える。テストを見つけてくれるコマンドラインツールが付属。 |
subunit | unittestの機能拡張 | Robert Collins | 複数プロセスでテストを実行する機能をunittestに追加。多プロセスからunittestにリポートを送る機能を持つ。 | |
testtools | unittestの機能拡張 | Jonathan Lange | TwistedやBazzrのようなプロジェクトから派生した,便利なunittestの機能拡張。 | |
pyUnitPerf | パフォーマンステスト | Grig Gheorghiu | JUnitPerfの移植。 パフォーマンステストをunittestベースのテストに追加する。 | |
Sancho | ユニットテスト | MEMS | MEMS Exchange Tools | 失敗したテストの結果だけを出力するツール。 |
Peckcheck | 仕様ベースユニットテスト | Darius Bacon | テスト用のメソッドのデフォルト引数としてテストデータ生成関数を指定してテストを定義する。テストデータ生成関数を使って関数やメソッドの引数に値を渡してテストをする。 すると,いろんなデータで関数などを「たたいて(peck)」テストを実行する。 | |
testosterone | ユニットテスト | Chad Whitacre | コマンドラインとcursesを使った漢のテストランナー。テストランナーのiPod(原文ママ)。テストの結果を閲覧しやすくするツール。 | |
zope.testing | ユニットテスト | Zope3 Community | ポストモダンなデバッグ機能を搭載した強力なテストランナー。プロファイル結果とカバレッジのリポート機能を持つ。Zopeに依存せず単体で動く。 | |
pry | ユニットテスト | Nullcube | カバレッジの分析機能,プロファイル機能,マイクロベンチマーキングと強力なコマンドラインインターフェースを持つテスティングフレームワーク。 | |
Pythoscope | ユニットテスト | Michal Kwiatkowski | Pythonで書かれたレガシーシステムのユニットテストを自動的/半自動で生成するツール。 | |
dutest | unittestの機能拡張 | Olemis Lang |
doctestをユニットテストで利用できるようにするオブジェクト指向のインターフェース。setUpやtearDownを使えるようになるので,doctestにテストの初期化や終了処理を書かなくて良くなる。 クラスの継承関係に渡ってdoctestを見つけることができる。 |
noseは使ってるけど,py.testも良さそうだなあ。