pytest运行报AttributeError: 'TestFiles' object has no attribute '_reports'求助
报错原因
- 核心问题是实例方法的调用对象传错了。
Files类中定义的get_file_data和_reports都是实例方法,方法里的self默认指向Files类的实例对象。 - 测试代码中直接以类名调用
Files.get_file_data(self),传入的self是TestFiles类的实例,该类没有定义_reports方法,get_file_data内部调用self._reports()时,就会在TestFiles实例上查找方法,找不到就抛出对应的属性错误。 - 额外的导入逻辑错误:
Files类定义在main.py中,直接写import Files无法正确导入目标类。
修复方案
- 修正导入语句,从main.py中引入Files类:
# test.py开头修改为 from main import Files
- 调用
get_file_data前先创建Files类的实例,通过实例调用方法,不需要手动传入self参数:
# 修改后的TestFiles类代码 class TestFiles: def test_generate_output_files(self): # 实例化Files类 files_obj = Files() # 直接调用实例的get_file_data方法,self会自动传入 files_obj.get_file_data()
如果确实需要单独测试私有方法_reports,Python的私有方法本质是做了名称修饰,你可以通过实例._Files__reports()的方式访问,但通常不建议直接测试私有方法,通过公共方法get_file_data覆盖对应的业务逻辑测试即可。
内容的提问来源于stack exchange,提问作者Ankit Tiwari
相关产品推荐
相关产品推荐

