Python模塊——unittest 單元測試

 unittest是python單元測試框架,又叫做PyUnit。

之所以稱爲框架是它代替開發人員完成了一些調用、IO等與單元測試無直接關係的支撐代碼,讓開發人員可以專注與測試用例的編寫,簡化單元測試工作。

 

單元測試是一種基本的,由開發人員(而不是測試人員)完成的測試,保證一個程序基本單元的正確性。單元的概念我個人理解就類似電子設備中的元器件,一個個元器件(單元)組成了整個電子設備(程序)。而元器件的功能是單一的、確定的,可以在電子設備未完全成型(程序未完全實現)之前對其正確性進行測試(即單元測試)。同時,這些元器件是獨立的,可以方便的更換(高內聚,低耦合,可以任意重構)。所以單元測試是測試驅動開發、極限編程、敏捷中的重要概念。

 

一個簡單的例子:

#FileName: ut_target.py
class EqualToZero(Exception): pass
class SplitZero(object):
    def splitzero(self, num):
        if num > 0:
            return "num is bigger than zero"
        elif num < 0:
            return "num is smaller than zero"
        else:
            raise EqualToZero

 

 

#FileName: utest.py
from ut_target import SplitZero, EqualToZero
import unittest
 
class SzTestCase(unittest.TestCase):
    def setUp(self):
        print "test start"
    def tearDown(self):
        print "test stop"
    def testSzBig(self):
        num = 10
        sz = SplitZero()
        self.assertEqual(sz.splitzero(num),
                         "num is bigger than zero")
    def testSzSmall(self):
        num = -10
        sz = SplitZero()
        self.assertEqual(sz.splitzero(num),
                         "num is smaller than zero")
    def testSzEqual(self):
        num = 0
        sz = SplitZero()
        self.assertRaises(EqualToZero, sz.splitzero, num)
 
if __name__ == "__main__":
    unittest.main()

 

執行python utest.py -v

testSzBig (__main__.SzTestCase) ... test start
test stop
ok
testSzEqual (__main__.SzTestCase) ... test start
test stop
ok
testSzSmall (__main__.SzTestCase) ... test start
test stop
ok
 
----------------------------------------------------------------------
Ran 3 tests in 0.000s
 
OK

 

unittest基本使用方法

1.import unittest

2.定義一個繼承自unittest.TestCase的測試用例類

3.定義setUp和tearDown,在每個測試用例前後做一些輔助工作。

4.定義測試用例,名字以test開頭。

5.一個測試用例應該只測試一個方面,測試目的和測試內容應很明確。主要是調用assertEqual、assertRaises等斷言方法判斷程序執行結果和預期值是否相符。

6.調用unittest.main()啓動測試

7.如果測試未通過,會輸出相應的錯誤提示。如果測試全部通過則不顯示任何東西,這時可以添加-v參數顯示詳細信息。

 

參考

[1]http://docs.python.org/release/2.6.8/library/unittest.html

[2]http://www.ibm.com/developerworks/cn/linux/l-pyunit/index.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章