テストを書く方法はいくつかある。
- unittest
- nose
- モジュール名、クラス名、関数名などに「test」と入れておくだけで、それをテストケースとみなして実行してくれるツール。PyUnitよりも手軽に書ける。ターゲットモジュールとテストモジュールを分離しなくてよい(というか一緒のほうが自然)なので、見通しがよい。
- setUp/tearDownとか、テスト実行のデコレーターなどの機能はない(みたい)なので、込み入ったテストには不向き。
- だがPyUnitのテストをnoseに探索させて実行させてもいいので、両方使えばいいのかもしれない(未確認)。
- doctest
- コメントにテストケースを書けるアレ。
- とてもいいんだけど、TurboGearsの中で書くクラス・メソッドについては、うまく使えないような気がする。テストの前準備(fixture)が面倒だったり、結果も単純でなかったりと。
- ロジックだけのメソッドとかが出てきたら使いましょう。
テストを実行する方法は、いくつかある。
- noseを使う
- プロジェクトのディレクトリ(start-xyz.pyのあるところ)で、nosetests projectname.tests と実行する。引数がないと自動ですべてのテストを探索して実行してくれるのだが、なぜかへんなエラーが出るので使っていない。環境依存かもしれないし、IdentityManagerを有効にしているせいかもしれない。バージョン(0.9a6)の問題かもしれない。
- そうそう、noseは最初0.86rcだかなんだかが入っていたのだが(うろ覚え)、0.9にしたら若干調子が良くなった。なにがどう良くなったのかは、すいません忘れました。
- Eclipse+PyDev
実は開発時にEclipse3.2+PyDev1.2.1を使っている。プロジェクトのディレクトリの1つ上をEclipseのプロジェクトディレクトリとしている(単なる好み)。そのうえで、昨日できた気がするのになぜかいま動かない。。。/projectname を選択してRun As...→Python unit-testを実行すると、unittest由来のテストを実行してくれる。TurboGearsが自動生成するデフォルトのテストケースはunittest由来になっていないので注意。