我們做這樣的事情才能運行實際上是什麼整合(迴歸)的unittest
框架(實際上它們其中一個內部定製爲我們提供了巨大的好處,例如在羣集上並行運行試驗中測試機器等等 - 這種定製的巨大附加價值是我們如此熱衷於使用框架的原因)。
每個測試都在文件中表示(在該測試中使用的參數,然後是預期的結果)。我們integration_test讀取目錄下的所有這樣的文件,分析它們的每一個,然後調用:
def addtestmethod(testcase, uut, testname, parameters, expresults):
def testmethod(self):
results = uut(parameters)
self.assertEqual(expresults, results)
testmethod.__name__ = testname
setattr(testcase, testname, testmethod)
我們先從一個空的測試用例類:
class IntegrationTest(unittest.TestCase): pass
,然後調用addtestmethod(IntegrationTest, ...
在一個循環我們正在讀取所有相關文件並解析它們以獲取測試名稱,參數和表達式。
最後,我們稱之爲內部專門的測試運行者,它負責繁重的工作(分佈在集羣中可用機器上的測試,收集結果等)。我們不想重塑那個富有附加價值的車輪,所以我們正在製作一個測試用例,儘量接近典型的「手工編碼」測試用例,以便「欺騙」測試跑步者,使其適合我們; - )。
除非您有具體的原因(好的測試者或類似人員)使用unittest
的方法來進行(集成)測試,否則您可能會發現使用不同的方法可以讓您的生活更簡單。然而,這個方法非常可行,我們對它的結果非常滿意(主要包括大型集成/迴歸測試套件的快速運行!)。
爲了澄清你的問題,你的意思是像PHPUnit中的數據提供者? http://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.data-providers – majelbstoat 2010-02-04 04:30:32