Python–自由之路(二)Unittest Framework

來源:互聯網
上載者:User

 

l Python Unit Testing Framework ---Unittest Model  學習

l Python 中的測試架構,也可稱做PyUnit ,幾乎就是JUnit的Python 版本。支援setup and shutdown code for tests, 獨立測試,整合測試,我使用的是python 2.6 ,內建的測試模組名為unittest 。可以通過from unittest import * 方法匯入需要的功能模組 

l 繼承python Unittest TestCase 類,測試方法必須以test開頭命名,單元測試時可使用派生使初始化測試代碼的重用。

l TestSuit,作為輕量級整合測試時使用。可以方便地添加基底類型為Testcase的所有子類,統一測試。

l widgetTestSuite=unittest.TestSuite() widgetTestSuite.addTest(WidgetTestCase('testDefaultSize')) widgetTestSuite.addTest(WidgetTestCase('testResize'))

l 單元測試的使用---匯入unittest模組 unittest.main() 在被測試單元中實現至少一個TestCase派生,或者從TestLoader載入,例: 

l suite =unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions) unittest.TextTestRunner(verbosity=2).run(suite) 

l 為了工作方便,在上述基礎上寫了一個測試模組test,當建立好自己的模組後,有時候需要進行模組的單元測試,這時候只要匯入test, 然後在Tested Module代碼後面直接調用函數測試,屬性值測試,就可以直接測試了,測試結果整合了TestCaseResult,會給出具體的測試報告,自己覺得很方便而已,呵呵,後面有時間還想擴充一下針對類的測試,在函數測試上引入多線程等等。主要應用了Python運行時指令碼編譯的特性,根據被測試模組的內容動態產生字串代碼對象,經編譯後就可以在程式中動態產生類以供調用。附test代碼:

 

Code
'''
Created on 2009-7-18

@author: ysisl

This is a unit test framework module .

you can test your Module only by imported test.py 

1. use addTestAttrs(attr_name,value) ,add the testing variable(attr_name) of your module (value is anticipant)

2. use adddTestMethods(func,args,result=None) ,add the testing Function of your module

    (args must be tuple type,example:'args=(3,4)')

'''

from time import ctime

import unittest

__all__=['allTestAttrs','allTestMethods','startModuleTest']

_model_funcs=[]

_model_attrs=[]

def addTestAttrs(_attr_name,value):

    _model_attrs.append((_attr_name,value))

def addTestMethods(func,args,result=None):

    _model_funcs.append((func,args,result))

def makecode():

    _head_code='''

class TestModule(unittest.TestCase):

    def a(self):

        print 'aaa'

'''
    _loop_func=_loop_attr=''

    for i,attr in enumerate(_model_attrs):

        _attr,_attr_value=attr[0],attr[1]

        if type(_attr)==str :

            _attr=repr(_attr)

            _attr_value=repr(_attr_value)

        _loop_attr_code='''

    def test_attr_%s(self):

        self.assertEqual(%s,%s)

''' %(str(i+1),_attr ,_attr_value)

        _loop_attr=_loop_attr+_loop_attr_code

    for i,func in enumerate(_model_funcs):

        _func_result=str(func[2])

        if type(func[2])==str:

            _func_result=repr(func[2])

        _loop_func_code='''       

    def test_method_%s(self):

        self.assertEqual(%s(*%s),%s)

        

''' %(func[0].__name__,'_model_funcs['+str(i)+'][0]',str(func[1]),_func_result)

        _loop_func+=_loop_func_code

    return _head_code+_loop_attr+_loop_func

def startModuleTest():

    print ''.join(['*'*13,' '*2,'Model Unit Test at:',ctime(),' '*2,'*'*13,'\n'])

    code= makecode()

    exec code

    suite = unittest.TestLoader().loadTestsFromTestCase(TestModule)

    unittest.TextTestRunner(verbosity=2).run(suite)

if __name__ == '__main__':

    addTestMethods(addTestAttrs, ('test','test'),None)

startModuleTest()

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.