類和模塊級別的固定裝置在中實現(xiàn)TestSuite。當(dāng)測試套件遇到來自新類的測試時,則tearDownClass()從前一個類(如果有的話)被調(diào)用,然后setUpClass()從新類中調(diào)用。
類似地,如果測試來自與先前測試不同的模塊,tearDownModule則從之前的模塊開始運行,然后setUpModule從新模塊運行。
在所有測試運行最后tearDownClass并且tearDownModule運行之后。
請注意,共享裝置在測試并行化等潛在功能方面表現(xiàn)不佳,并且會破壞測試隔離。他們應(yīng)該小心使用。
由unittest測試加載器創(chuàng)建的測試的默認(rèn)排序是將來自相同模塊和類的所有測試分組在一起。這將導(dǎo)致setUpClass/ setUpModule(等)每個類和模塊只被調(diào)用一次。如果隨機(jī)化訂單,以便來自不同模塊和類的測試彼此相鄰,則可以在單次測試中多次調(diào)用這些共享夾具功能。
共享燈具不適用于具有非標(biāo)準(zhǔn)訂購的套件。一個BaseTestSuite仍然存在不希望支持共享夾具框架。
如果在共享夾具功能之一中發(fā)生任何異常,則測試報告為錯誤。因為沒有相應(yīng)的測試實例,所以創(chuàng)建一個_ErrorHolder對象(與a具有相同的接口TestCase)來表示錯誤。如果你只是使用標(biāo)準(zhǔn)的unittest測試運行器,那么這個細(xì)節(jié)并不重要,但如果你是一個框架作者,它可能是相關(guān)的。
這些必須作為類方法來實現(xiàn):
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls._connection = createExpensiveConnectionObject()
@classmethod
def tearDownClass(cls):
cls._connection.destroy()
如果您希望setUpClass和tearDownClass呼吁然后在基類必須調(diào)用由他們自己。這些實現(xiàn)TestCase是空的。
如果在此期間發(fā)生異常setUpClass,則類中的測試未運行tearDownClass且未運行。被跳過的班級不會有setUpClass或tearDownClass運行。如果異常是一個SkipTest異常,那么該類將被報告為被跳過而不是作為錯誤。
這些應(yīng)該作為函數(shù)來實現(xiàn):
def setUpModule():
createConnection()
def tearDownModule():
closeConnection()
如果在某個時候發(fā)生異常setUpModule,則模塊中的所有測試都不會運行,并且tearDownModule不會運行。如果異常是一個SkipTest異常,那么該模塊將被報告為被跳過而不是錯誤。
更多建議: