nose 鼻をきかせてテストせよ
TRANSCRIPT
Nose鼻をきかせてテストせよ
aodagBPStyle #10
ユニットテストツール
unittest標準ライブラリxunit由来TestCaseを必ず継承するFixtureがクラス単位だけPEP8に従ってない!
nose簡単にテストを書ける簡単にテストを実行できる豊富なプラグインPEP8 ready
簡単にテストを書くための機能
Discover TestsFixturesPlugins
Discover Tests
パッケージ、モジュール、クラス、関数などで名前に test_* などを含むもの。TestCaseを継承したクラス
を探し出してテストしてくれる。
with-doctestオプションでテスト以外のコードからdoctestを探し出してテストしてくれる。
例
from nose.tools import eq_, ok_
def test_it(): assert 1 + 1 == 2
def test_with_bucho(): ok_(bucho.show())
実行するには?
$ nosetests
例:doctest
def show(): """ show something >>> show() something """ print "something"
doctestを実行
$ nosetests --with-doctest
Fixtures
setUpやtearDownのこと
Noseで使えるFixtureの単位パッケージモジュールクラス関数
パッケージ Fixture
__init__.py に setUp, tearDown関数を書く
モジュールFixture
モジュール内のトップレベルで setUp, tearDown関数を書く
関数Fixture
with_setup デコレータでsetUp関数とtearDown関数をくっつける
@with_setup(createdb, teardowndb)def test_it(): ....
Fixtureの例
Fixtureが実行される順序
パッケージ1のsetUpモジュール1のsetUpモジュール1内のテスト関数実行モジュール1のtearDownモジュール2のsetUpモジュール2内のテスト関数実行モジュール2のtearDownパッケージ2のtearDown
Doctest
with-doctestソースコメント中のdoctestも実行する
doctest-extensionsphinxドキュメントなどの中に書いてあるdoctestも実行する
doctest-fixturedoctestのためのfixtureを指定する
プラグイン
Cover テストカバレージを収集
Log Capture ログ出力を収集
looping over failed tests テストが失敗する間、ファイル更新を監視して自動でテストを実行
プラグインも簡単に
プラグインインターフェイス IPluginInterface
普通はPluginクラスを継承すればOK
3/26 都内某所
Noseで全てのテストで必ずteardownする処理が欲しい(GAEのログイン情報を持った環境変数を消す
Noseのプラグインを作り始める(イマココ #pyhack
プラグイン書けばできるよプラグインはテストケースごとのフックがあるからね
http://togetter.com/li/116938
他のテストツール
WebTest WSGIアプリの機能テストに。TOX virtualenvへのインストールからテスト実行を自動化。unittest2 assert* が充実。discoveryも多少サポート。
Installation and quick start - nose v1.0.0 documentation http://somethingaboutorange.com/mrl/projects/nose/1.0.0/