使用pytest monkeypatch fixture时出现'setattr'属性错误的咨询
问题原因及解决办法
你的错误根本原因不是pytest没加载monkeypatch fixture,而是测试方法的参数顺序错了。
因为你把测试方法写在类TestMyClass里面,类中的测试方法默认第一个参数是类实例self,但你直接把monkeypatch放在了第一个参数位置,导致pytest把self实例传给了monkeypatch参数。这时候你调用monkeypatch.setattr,实际是在调用TestMyClass实例的setattr方法,而这个类根本没有这个属性,所以抛出AttributeError。
解决步骤:
- 给测试方法加上
self作为第一个参数,把monkeypatch放在后面:
class TestMyClass: def test_calc(self, monkeypatch): # 新增self参数 mocked_calc= Mock(return_value=54) monkeypatch.setattr(MyClass1,'calc1',mocked_calc) service_two = MyClass2(1,"test") assert service_two.calc(3,1)== 54 mocked_calc.assert_called_once_with(3,1) # 去掉多余的assert包裹
- 另外注意最后一行的
assert mocked_calc.assert_called_once_with(3,1)是多余的,assert_called_once_with本身就会在调用不符合预期时抛出断言错误,不需要再用assert包裹。
内容的提问来源于stack exchange,提问作者KZiovas
相关产品推荐
相关产品推荐

