2014/12/30

ライブラリ:nose

Pythonの「 nose 」というライブラリをご紹介します。

import nose

nose はユニットテスト用のライブラリです。「 unittest 」という名前そのままのユニットテスト用ライブラリが標準ライブラリに含まれてはいますが、これはあくまでも xUnit 系列の標準ライブラリ、的な位置づけのもの。nose を使えば、ユニットテストをよりかんたん・シンプルに活用することができます。

以下、 nose の基本的な使い方を見ていきます。まずは最小単位から。


テストケースの書き方

次のようなスクリプトを作ります。
# test_int.py
# assert 文をシンプルに書ける ok_ eq_ メソッドの読み込み
from nose.tools import ok_, eq_

# テストケース
# test で始まる名前の関数で書けばOK
def test_1_is_true():
    ok_(bool(1))

def test_1_plus_2():
    eq(1 + 2, 3)

ここでは、ライブラリを読み込んで関数を2つ定義する、というごくごくシンプルなテストスクリプトを書いています。名前が test から始まるこれらの関数が nose ではテストケースとして認識されます。

ok_ eq_ は assert 文をよりシンプルに書くためのラッパ関数です。これを使うとよりシンプルに書くことができますが、必須ではありません。通常の assert を使っても大丈夫です。


テストの実行の仕方

テストの実行は nosetests コマンドで行います。

上記スクリプトがあるディレクトリに移動したら nosetests コマンドを実行します。
$ nosetests test_unit.py

するとテストが実行され、以下のようなメッセージが表示されます。
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

ここでは . がひとつのテストケースを表します。具体的にどのテストケースが実行されたのか確認したい場合は詳細表示のための -v オプションを利用します。
$ nosetests test_unit.py -v

テスト名が表示されるようになりました。
test_int.test_1_is_true ... ok
test_int.test_1_plus_2 ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK


テストの自動探索と実行

このようにテストスクリプトを直接指定するやり方でもOKですが、引数なしの nosetests コマンドを使うと、もっとかんたんにテストを実行することができます。
$ nosetests

nosetests が実行されると、 test で始まるスクリプトの中から test で始まる関数が探索され、順次実行されていきます。


インストール

pip が入っていれば pip install でインストールすることができます。
$ pip install nose


以上です。

ここでご紹介したのは nose の機能のごく一部です。ほかにも、 unittest と同じようにクラスを使ってテストを書く方法や unittest や doctest も合わせて実行する機能、 setup/teardown 機能など、便利な機能が豊富に用意されています。

nosetest についてはわかりやすい説明をされている方がすでにたくさんいますので、詳しく知りたい方は参考ページをご覧になってみてください。


参考
nose まとめ。とてもわかりやすいです。日本語で nose について学ぶならベストかと思います。
Nose 利用ノート

以下英語です。
「 nose って何がいいの?」という質問への答えが書かれたスレッドです。
http://stackoverflow.com/questions/5696884/python-nose-vs-unittest

nose の基礎から少し踏み込んだ内容まで1ページでまとめて説明されています。
nose introduction - Python Testing

こちらは公式ドキュメント。「基本的な使い方」のページです。
Basic usage — nose公式ドキュメント

こちらのページもシンプルでわかりやすいです。カバレッジモジュールについても触れられています。
miscellaneous

事例ベースで node を学ぼうという趣旨のページ。実コードが見たい、という方に。
Python testing with nose by example | Cesar's code

0 件のコメント: