unittest.TestCase setUpClass 重写和继承

从下面的示例中可以看出,我BaseClass为所有测试定义了一个,每个测试用例类都继承基类。


这两个类都需要执行一次性初始化,test_vehicles.py执行时,我需要确保setUpClass基类的初始化也被调用,不知道如何实现正在@classmethod发挥作用的位置。


# base.py

import unittest


class BaseClass(unittest.TestCase):

   @classmethod

   def setUpClass(cls):

       # initialize stuff 

       cls.app = app

# test_vehicles.py

class VehiclesTestCase(BaseClass):


    @classmethod

    def setUpClass(cls):

        # initialize stuff 

        cls.vehicle_id = '123'


    def test_get_vehicle(self):

       resp = self.app.get(self.vehicle_id)

       self.assertEqual(resp, True)




if __name__ == '__main__':

    unittest.main()


芜湖不芜
浏览 200回答 2
2回答

叮当猫咪

解决方案:使用super函数并绑定到类上# test_vehicles.pyclass VehiclesTestCase(BaseClass):    @classmethod    def setUpClass(cls):        super(VehiclesTestCase, cls).setUpClass()        cls.vehicle_id = '123'if __name__ == '__main__':    unittest.main()

倚天杖

您可以使用super继承类中的方法setUpClass来访问setUpClassof BaseClass:super().setUpClass()如果不想super在每个子类中调用,只需在 in 中创建一个抽象方法并在ofBaseClass中调用即可。现在必须实现这个抽象方法:setUpClassBaseClassVehiclesTestCaseclass BaseClass(unittest.TestCase):   @classmethod   def setUpClass(cls):       # initialize stuff        cls.app = app   @classmethod   def _setUpChild(cls):       raise NotImplementedErrorclass VehiclesTestCase(BaseClass):    @classmethod    def _setUpChild(cls):        # initialize stuff         cls.vehicle_id = '123'    def test_get_vehicle(self):       resp = self.app.get(self.vehicle_id)       self.assertEqual(resp, True)我还建议,如果它BaseClass不能TestCase自行运行,则不要使用它。尽管它没有测试,但它总是会出现在您的测试报告中。您可以改为使用多重继承:class BaseClass:   # Stuffclass VehiclesTestCase(BaseClass, unittest.TestCase):   # Stuff继承顺序很重要。方法查找是从左到右进行的。这意味着BaseClass.setUpClass会覆盖setUpClassof TestCase。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python