如何在Python对象的模拟方法中调用self? [英] How to call self in a mock method of an object in Python?

查看:148
本文介绍了如何在Python对象的模拟方法中调用self?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试测试一些代码,这些代码除了将结果保存到数据库外不会返回任何内容.通过模拟save方法,我希望检查事物是否已正确处理:

I try to test some codes which don't return anything but save the result to the DB. By mocking the save method, I wish to check whether things have been processed correctly:

def mock_save(self):
    assert(self.attr, 'dest_val')
with mock.patch.object(Item, "save", create=True) as save:
    save.side_effect = mock_save
    func_to_call() //in func_to_call, I call item.save()

但是,似乎不允许这样做.它说参数不匹配的数量.

However, it seems that this is not allowed. It says that the number of argument mismatch.

如果我定义dock_save(),它将无法正常工作.

If I do def mock_save(), it won't work.

我怎么也可以引用模拟方法所作用的对象? (我在另一个适用于 init 方法的线程中看到了该线程,可以直接从类中调用它)

How can I have a reference to the object which the mock method act upon too? (I saw it in another thread which is applicable to init method which can be called directly from the class)

推荐答案

您需要autospec=True

def mock_save(self):
    assert self.attr == 'dest_val'
with mock.patch.object(Item, "save", autospec=True) as save:
    save.side_effect = mock_save
    func_to_call()

这篇关于如何在Python对象的模拟方法中调用self?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆