为了账号安全,请及时绑定邮箱和手机立即绑定

unittest.TestCase setUpClass 重写和继承

unittest.TestCase setUpClass 重写和继承

芜湖不芜 2023-07-11 10:38:52
从下面的示例中可以看出,我BaseClass为所有测试定义了一个,每个测试用例类都继承基类。这两个类都需要执行一次性初始化,test_vehicles.py执行时,我需要确保setUpClass基类的初始化也被调用,不知道如何实现正在@classmethod发挥作用的位置。# base.pyimport unittestclass BaseClass(unittest.TestCase):   @classmethod   def setUpClass(cls):       # initialize stuff        cls.app = app# test_vehicles.pyclass 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()
查看完整描述

2 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

解决方案:使用super函数并绑定到类上

# test_vehicles.py

class VehiclesTestCase(BaseClass):


    @classmethod

    def setUpClass(cls):

        super(VehiclesTestCase, cls).setUpClass()

        cls.vehicle_id = '123'



if __name__ == '__main__':

    unittest.main()


查看完整回答
反对 回复 2023-07-11
?
倚天杖

TA贡献1828条经验 获得超3个赞

您可以使用super继承类中的方法setUpClass来访问setUpClassof BaseClass:


super().setUpClass()

如果不想super在每个子类中调用,只需在 in 中创建一个抽象方法并在ofBaseClass中调用即可。现在必须实现这个抽象方法:setUpClassBaseClassVehiclesTestCase


class BaseClass(unittest.TestCase):

   @classmethod

   def setUpClass(cls):

       # initialize stuff 

       cls.app = app


   @classmethod

   def _setUpChild(cls):

       raise NotImplementedError



class 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:

   # Stuff


class VehiclesTestCase(BaseClass, unittest.TestCase):

   # Stuff

继承顺序很重要。方法查找是从左到右进行的。这意味着BaseClass.setUpClass会覆盖setUpClassof TestCase。


查看完整回答
反对 回复 2023-07-11
  • 2 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信