unittest 类和模块夹具
类和模块级别的固定装置在中实现TestSuite。当测试套件遇到来自新类的测试时,则tearDownClass()从前一个类(如果有的话)被调用,然后setUpClass()从新类中调用。
类似地,如果测试来自与先前测试不同的模块,tearDownModule则从之前的模块开始运行,然后setUpModule从新模块运行。
在所有测试运行最后tearDownClass并且tearDownModule运行之后。
请注意,共享装置在测试并行化等潜在功能方面表现不佳,并且会破坏测试隔离。他们应该小心使用。
由unittest测试加载器创建的测试的默认排序是将来自相同模块和类的所有测试分组在一起。这将导致setUpClass/ setUpModule(等)每个类和模块只被调用一次。如果随机化订单,以便来自不同模块和类的测试彼此相邻,则可以在单次测试中多次调用这些共享夹具功能。
共享灯具不适用于具有非标准订购的套件。一个BaseTestSuite仍然存在不希望支持共享夹具框架。
如果在共享夹具功能之一中发生任何异常,则测试报告为错误。因为没有相应的测试实例,所以创建一个_ErrorHolder对象(与a具有相同的接口TestCase)来表示错误。如果你只是使用标准的unittest测试运行器,那么这个细节并不重要,但如果你是一个框架作者,它可能是相关的。
setUpClass和tearDownClass
这些必须作为类方法来实现:
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls._connection = createExpensiveConnectionObject()
@classmethod
def tearDownClass(cls):
cls._connection.destroy()
如果您希望setUpClass和tearDownClass呼吁然后在基类必须调用由他们自己。这些实现TestCase是空的。
如果在此期间发生异常setUpClass,则类中的测试未运行tearDownClass且未运行。被跳过的班级不会有setUpClass或tearDownClass运行。如果异常是一个SkipTest异常,那么该类将被报告为被跳过而不是作为错误。
setUpModule和tearDownModule
这些应该作为函数来实现:
def setUpModule():
createConnection()
def tearDownModule():
closeConnection()
如果在某个时候发生异常setUpModule,则模块中的所有测试都不会运行,并且tearDownModule不会运行。如果异常是一个SkipTest异常,那么该模块将被报告为被跳过而不是错误。
更多建议: