2013年3月6日水曜日

Python3.3 で py.test を使いユニットテストする


py.testでユニットテスト

環境

$ python -V
Python 3.3.0

pip-3.3がインストールされている

py.testのインストール
pip install pytest



すごいシンプルなユニットテスト - 1


test_simple.py
import unittest

class TestSimple(unittest.TestCase):
    def test_equal(self):
        self.assertEqual(3, 3)
    
    def test_not_equal(self):
        self.assertNotEqual(3, 4)

    def test_ture(self):
        self.assertTrue(6 == 6)


if __name__ == '__main__':
    unittest.main()

実行結果
$ py.test simpleTest.py 
========================== test session starts ==========================
platform linux -- Python 3.3.0 -- pytest-2.3.4
collected 3 items 

test_simple.py ...

======================== 3 passed in 0.24 seconds ========================


すごいシンプルなユニットテスト - 2


maxNum.py
def maxNum(x, y):
    if(x > y):
        return x
    else:
        return y

if __name__ == '__name__':
    maxNum(2, 3)

testMaxNum.py
import maxNum
import unittest

class TestNumMax(unittest.TestCase):
    def test_numMax(self):
        #maxNum.maxNum(2, 3)の結果が3かどうかテストする。3ならテスト成功
        self.assertEqual(maxNum.maxNum(2, 3), 3)


if __name__ == '__main__':
    unittest.main()

実行結果
$ py.test testMaxNum.py 
========================== test session starts ==========================
platform linux -- Python 3.3.0 -- pytest-2.3.4
collected 1 items 

test_MaxNum.py .

======================== 1 passed in 0.32 seconds ========================


注意

ファイル名は、test_*.py または *_test.py に する
テストクラス名は、Test という接頭辞に する (__init__ メソッドをもたない)
テスト関数名やメソッド名は、test_ という接頭辞に する


Python 3.3 移行するならテスト環境を py.test と tox にすると便利
http://www.sakito.com/2012/09/python-33-pytest-tox.html

4データ駆動テストを nose と pytest でやってみた
http://d.hatena.ne.jp/t2y-1979/20120209/132874027


0 コメント: