このサイトについて

大人 meets プログラミング,Pythonで人生をハックしよう。
8月12日(日),プログラミングとAIのリテラシーをサックリと学ぶ講座を開発します。 (主催:角川アスキー総合研究所)

Python用のユニットテストツールまとめ

Python用のユニットテストツールまとめ

みなさんテストしてますか?

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も良さそうだなあ。

2010-08-27 04:54