Python unittest中setUpClass无法调用基类方法的问题
嘿,这个问题我之前也碰到过!咱们先拆解一下错误原因,再给你几个可行的解决办法:
为什么会报错?
你写的do_something()是实例方法——它需要依赖类的实例(也就是self参数)才能访问self.variable这种实例属性;但setUpClass()是类方法,它的操作对象是类本身(参数是cls),不是具体的实例。所以直接用cls.do_something()调用实例方法,Python就会告诉你:这个方法需要绑定到实例才能用,你现在啥实例都没传,当然报错啦!
另外提个小细节:你代码里class TestB(TestA.TestA):是写错了的,应该直接写成class TestB(TestA):,因为TestA已经是当前模块里的类,不需要嵌套引用。
解决方案1:把方法改成类方法(推荐,如果逻辑允许)
如果do_something的功能不需要依赖实例独有的属性,那把它改成类方法是最简洁的方案,同时把variable也改成类属性:
import unittest class TestA(unittest.TestCase): # 把实例属性改为类属性,整个类共享 variable = "hello" @classmethod def do_something(cls): print(cls.variable) return cls.variable class TestB(TestA): @classmethod def setUpClass(cls): var = cls.do_something() # 现在可以正常调用类方法了 if __name__ == '__main__': unittest.main()
解决方案2:在setUpClass里创建实例调用方法
如果do_something必须依赖实例属性(比如你的self.variable是在__init__里初始化的,每个实例可能有不同的值),那就在setUpClass里手动创建一个类的实例,然后通过实例调用方法:
import unittest class TestA(unittest.TestCase): def __init__(self, *args, **kwargs): super(TestA, self).__init__(*args, **kwargs) self.variable = "hello" def do_something(self): print(self.variable) return self.variable class TestB(TestA): @classmethod def setUpClass(cls): # 创建TestB的实例 test_instance = cls() var = test_instance.do_something() # 通过实例调用实例方法 if __name__ == '__main__': unittest.main()
这样就能解决你遇到的问题啦!
内容的提问来源于stack exchange,提问作者luisremis
相关产品推荐
相关产品推荐

