12.pythonのユニットテストモジュール——unittest

2016 ワード

現在のソフトウェア開発の過程で、テストは往々にして一つのプロジェクトの成否に関係している.だから、自分が書いたコードをどのようにテストするかを学ぶ必要があります.では、pythonはこの方面で何をすることができますか?
まず、独自のクラスファイルを作成します.
例1.widget.py
class Widget:
    def __init__(self,size=(40,40)):
        self._size=size
    def getSize(self):
        return self._size
    def resize(self,width,height):
        self._size=(width,height)
    def dispose(self):
        pass

手動でユニットテストを行います.
#-*-coding:UTF-8-*-
#python 
from widget import Widget
class TestWidget:
    def testSize(self):
        expectedSize=(40,40)
        widget=Widget()
        if widget.getSize()==expectedSize:
            print "test [Widget]:getSize works perfected!"
        else:
            print "test [Widget]:getSize doesn't work!"

# 
if __name__=='__main__':
    myTest=TestWidget()
    myTest.testSize()

手書きで作成されたこのテスト方法には多くの問題があります.
1.テストプログラムの書き方は一定の規範に従うことができなくて、10人のプログラマーは完全に異なるテストプログラムを書くことができます
2.プログラマー一人一人が自分の異なるテストクラスの方法を持っている場合、これらのテストされたクラスを維持するだけでは面倒で、テストクラスを維持することは言うまでもありません.
3.テスト用のコードはプログラム自体よりも多く、プログラマーの作業量を大幅に増加させる可能性があります.
だから、以上の点に基づいて、pythonは独自のフレームワークを発表して、これらの機能を完成させることができます.PyUnit
pythonのPyUnitテストフレームワークを使用します.
#-*-coding:UTF-8-*-
from widget import Widget
import unittest
class  WidgetTestCase(unittest.TestCase):
    def setUp(self):
        self.widget=Widget()
    def tearDown(self):
        self.widget=None
    def testSize(self):
        self.assertEqual(self.widget.getSize(),(40,40))

# 
def suite():
    suite=unittest.TestSuite()
    suite.addTest(WidgetTestCase("testSize"))
    return suite
# 
if __name__=="__main__":
    unittest.main(defaultTest='suite')

このユニットテストフレームワークを採用すると、pythonプログラマー全員が同じユニットテスト方法を使用できるようになり、テストプロセスは秩序ある動作になります.これがこのフレームワークがもたらす最大のメリットです.
 
python2.1以降のバージョンはpyUnitを標準モジュールとしており、追加のダウンロードは必要ありません.
参考資料http://pyunit.sourceforge.net/pyunit_cn.html