Python unittest获取Config类属性报TypeError的解决方法
报错根因
- 继承关系错误:测试类同时继承
Config和unittest.TestCase,unittest框架加载用例时会向测试类构造方法传入测试方法名作为参数,但Config的__init__方法仅接收self一个参数,无法处理额外传入的参数,直接触发TypeError: Config.__init__() takes 1 positional argument but 2 were given报错。 - 调用逻辑错误:
Config类中定义的_basedir、_name_project都是实例属性,set_project、属性getter都是实例级别的方法,必须先创建Config类的实例才能调用,直接通过类名访问的写法不符合Python类的实例化调用规则。
修复方案
不需要让测试类继承Config,改用组合的方式在测试前置方法中实例化Config对象即可,修改后的Test.py代码如下:
import unittest from Config import Config class Test(unittest.TestCase): def setUp(self): # 实例化配置类对象 self.config = Config() # 调用配置方法,不传参时项目名默认设为foo self.config.set_project() def test_000_set_project(self): # 访问实例属性输出 print(f'"{self.config.get_basedir}"') print(self.config.get_name_project) def tearDown(self): pass if __name__ == '__main__': unittest.main()
运行结果
执行上述测试代码后,控制台将输出符合预期的内容:
"C:/Users/example" foo
说明:如果不需要路径外层的双引号,把
print(f'"{self.config.get_basedir}"')改成print(self.config.get_basedir)即可,输出会变为C:/Users/example。
内容的提问来源于stack exchange,提问作者Fabricio Nahuel Rori
相关产品推荐
相关产品推荐

