現在我已經通過繼承TestSuite類來完成它了,因爲標準加載器將所有測試方法封裝在定義它們的TestCase的實例中,並將它們放在TestSuite中。我有TestSuite調用第一個TestCase的before()和after()方法。這當然意味着你不能初始化你的TestCase對象的任何值,但是你可能想在你的setUp中這樣做。
測試套件看起來是這樣的:
class BeforeAfterSuite(unittest.TestSuite):
def run(self, result):
if len(self._tests) < 1:
return unittest.TestSuite.run(self, result)
first_test = self._tests[0]
if "before" in dir(first_test):
first_test.before()
result = unittest.TestSuite.run(self, result)
if "after" in dir(first_test):
first_test.after()
return result
對於一些稍微細粒度控制我還創建自定義TestLoader這可以確保BeforeAfterSuite僅用於包裝測試方法,TestCase的對象,它看起來像這樣的:
class BeforeAfterLoader(unittest.TestLoader):
def loadTestsFromTestCase(self, testCaseClass):
self.suiteClass = BeforeAfterSuite
suite = unittest.TestLoader.loadTestsFromTestCase(self, testCaseClass)
self.suiteClass = unittest.TestLoader.suiteClass
return suite
可能缺少在這裏是一個try /唯獨身邊之前和之後塊可能會失敗在套房或東西所有的測試用例。