pytest运行测试类报AttributeError:无get_file_list属性如何解决
报错原因
Python类的普通实例方法第一个参数固定为类自身的实例对象(通常命名为self),pytest执行测试类的测试方法时也遵循该语法规则:
- 你将fixture名
d_service放在了测试方法的第一个参数位,实际该参数收到的是TestDService的实例对象,而非fixture返回的DService实例 - 调用
d_service.get_file_list等价于调用TestDService实例的get_file_list方法,该方法不存在就抛出了对应的AttributeError
修复方案
给测试方法第一个位置补充self参数,将d_service放到第二个参数位即可,pytest会自动匹配fixture名称完成注入:
class TestDService: # 补全self参数,fixture参数放在后续位置 def test_get_file_list(self, d_service): print(type(d_service)) files = d_service.get_file_list('') print(files)
你之前定义的fixture逻辑完全正常,不管用
return还是yield返回都不需要修改。
可选优化
如果你不想在测试方法中加self参数,可以选择两种方案:
- 将测试方法直接写在测试类外部,不需要类包裹
- 给测试方法加
@staticmethod装饰器,标记为静态方法,不需要self参数
内容的提问来源于stack exchange,提问作者ca9163d9
相关产品推荐
相关产品推荐

