Amazon

2011年9月1日木曜日

Pythonでテスト駆動開発1

Pythonでテスト駆動開発を行うためのツールとしてunittestとnoseがある。参考はこちら
unittestでは必要なクラスを継承するなど、いくつかの決まりごとがあるが、noseでは正規表現 "(?:^|[b_.-])[Tt]est" にマッチしたクラス・関数が実行されるようになっているため、ルールがシンプル。

noseのインストール
% easy_install nose
 
○テスト実行時
テストの実行は次の2種類があります。
  1. nosetests コマンドでテスト対象のファイルやディレクトリを指定
  2. テストスクリプト内でテストを実行
(1) の場合は、nosetests の引数にテストファイルを指定、あるいは -w オプションでテストファイルを含んだディレクトリを指定することでテスト実行します。
(2)の場合は、テストプログラム内で nose.main 関数を呼び出すようにします。
def test_compare():
    assert 1==1
if __name__ == '__main__':
    import nose
    nose.main()


テストクラスが入っているディレクトリ内で 
% nosetests 
 
サンプルクラス(test1.py)
#-*- coding: utf-8 -*-

class Dollar():

    def __init__(self, amount=0):
	self.amount = amount

    def times(self, multiplier):
	self.amount *= multiplier
テストコード(test2.py)
#-*- coding: utf-8 -*-

from test1 import Dollar
from nose.tools import *

class TestDollar():

    def testMultiplicaton(self):
        five = Dollar(5)
        five.times(3)
        eq_(15, five.amount)
成功すると
---------------------
Ran 1 test in 0.047s

OK
失敗すると
======================================================================
FAIL: test2.TestDollar.testMultiplicaton
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\nose-1.1.2-py2.7.egg\nose\case.py", line 1
97, in runTest
    self.test(*self.arg)
  File "C:\temp\test2.py", line 11, in testMultiplicaton
    eq_(10, five.amount)
  File "C:\Python27\lib\site-packages\nose-1.1.2-py2.7.egg\nose\tools.py", line
31, in eq_
    assert a == b, msg or "%r != %r" % (a, b)
AssertionError: 10 != 15

----------------------------------------------------------------------
Ran 1 test in 0.562s

FAILED (failures=1)
○オプション

verbose モード

「-v」 オプションを有効にすると、verbose モードでテストが実行されます。-vvv のように v を重ねると、より verbose なメッセージが表示されます。

pdb 対応


「--pdb」 オプションを有効にすると、テストプログラムで例外が起きると同時に、pdb が起動し、デバッグモードに入ります。

「--pdb-failures」オプションを有効にすると、テストプログラムでテストが失敗すると同時に、pdb が起動し、デバッグモードに入ります。

パターンマッチ


「-i 正規表現パターン」オプションを有効にすると、正規表現にマッチしたファイルのみがテスト実行されます。

「-e 正規表現パターン」オプションを有効にすると、逆に正規表現にマッチしたファイルは実行されなくなります。


○さらに詳しく理解するには
nose まとめ 1

0 件のコメント:

コメントを投稿

Amazon3