• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            馭風(fēng)萬里無垠

            Python中根據(jù)不同參數(shù)組合產(chǎn)生單獨的test case的一種方法

             
            Python自帶的unittest和test兩個模塊為編寫test case提供了很靈活的支持,最常用的情況就是繼承自unittest.TestCase類,然后對每一個要進(jìn)行測試的行為寫一個test_開頭的類成員函數(shù),最后可以利用test.test_support.run_unittest函數(shù)跑所有的test case.
             
             
            在某種情況下,可能需要用不同的參數(shù)組合測試同樣的行為,這些行為要么很耗時間(譬如下載數(shù)據(jù)),要么是你希望從test case的執(zhí)行結(jié)果上知道在測試什么,而不是單單得到一個大的 test case;此時如果僅僅寫一個test case并用內(nèi)嵌循環(huán)來進(jìn)行,那么其中一個除了錯誤,很難從測試結(jié)果里邊看出來。
             
            問題的關(guān)鍵在于是否有辦法根據(jù)輸入?yún)?shù)的不同組合產(chǎn)生出對應(yīng)的test case;譬如你有10組數(shù)據(jù),那么得到10個test case,當(dāng)然不適用純手工的方式寫那么多個test_成員函數(shù)。
            一種可能的思路是不利用unittest.TestCase這個類框中的test_成員函數(shù)的方法,而是自己寫runTest這個成員函數(shù),那樣會有一些額外的工作,而且看起來不是那么“智能”,如果目的是讓框架自動調(diào)用testcase.
             
            自然的思路就是
            • 利用setattr來自動為已有的TestCase類添加成員函數(shù)
            • 為了使這個方法湊效,需要用類的static method來生成decorate類的成員函數(shù),并使該函數(shù)返回一個test函數(shù)對象出去
            • 在某個地方注冊這個添加test成員函數(shù)的調(diào)用(只需要在實際執(zhí)行前就可以,可以放在模塊中自動執(zhí)行亦可以手動調(diào)用)

            最后的代碼就有了:

             
            01 import unittest
            02 from test import test_support
            03
            04 def MyTestCase(unittest.TestCase):
            05     def setUp(self):
            06         #some setup code
            07         pass
            08        
            09     def clear(self):
            10         #some cleanup code
            11         pass
            12        
            13     def action(self, arg1, arg2):
            14         pass
            15        
            16     @staticmethod   
            17     def getTestFunc(arg1, arg2):
            18         def func(self):
            19             self.actions(arg1, arg2)
            20         return func
            21        
            22 def __generateTestCases():
            23     arglists = [('arg11', 'arg12'), ('arg21', 'arg22'), ('arg31', 'arg32')]
            24     for args in arglists:
            25         setattr(MyTestCase, 'test_func_%s_%s'%(args[0], args[1]),
            26             MyTestCase.getTestFunc(*args) )
            27 __generateTestCases()
            28      
            29 def test_main():
            30     test_support.run_unittest(MyTestCase)

             

            如此,添加一個新的可變參數(shù)組合,就會新生成一個test case, 只需要將參數(shù)組合添加到arglist中就可以了。

            posted on 2009-10-12 21:20 skyscribe 閱讀(1598) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2009年7月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久人妻一区精品| 国产成人精品白浆久久69| 久久国产免费| 一本久久免费视频| 久久国产精品国产自线拍免费| 91久久福利国产成人精品| 国产精品久久久久久五月尺| 69国产成人综合久久精品| 久久久久久av无码免费看大片| 无码人妻精品一区二区三区久久久 | 久久婷婷人人澡人人爽人人爱| 国产亚洲精品自在久久| 亚洲欧美日韩精品久久亚洲区 | 久久精品国产亚洲AV香蕉| 国产一区二区精品久久岳| 久久99国产综合精品| 久久无码AV一区二区三区| 91精品国产91久久久久久青草| 亚洲精品无码久久久久去q| 亚洲国产成人久久综合区| 韩国无遮挡三级久久| 狼狼综合久久久久综合网| 久久人人爽人人爽人人爽| 伊色综合久久之综合久久| 国产精品亚洲美女久久久| 日本久久久精品中文字幕| 国内精品久久久久影院日本| 色诱久久久久综合网ywww| 中文字幕人妻色偷偷久久| 久久综合亚洲鲁鲁五月天| 无夜精品久久久久久| 欧美午夜A∨大片久久| 欧美久久一区二区三区| 色综合久久中文字幕综合网| 久久九九久精品国产免费直播| 国产午夜福利精品久久| 精品久久久久久无码中文字幕 | 亚洲va久久久噜噜噜久久狠狠| 精品久久久中文字幕人妻| 无码人妻精品一区二区三区久久 | 精品99久久aaa一级毛片|