Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 编写修补对象的contextmanager_Python_Mocking_Contextmanager - Fatal编程技术网

Python 编写修补对象的contextmanager

Python 编写修补对象的contextmanager,python,mocking,contextmanager,Python,Mocking,Contextmanager,在我的Python 3测试代码中,我有很多这样的语句: from unittest.mock import patch user = User(...) with patch.object(MyAuthenticationClass, 'authenticate', return_value=(user, 'token'): # do something 现在我想把它写成: with request_user(user): # do something 我如何编写一个方法r

在我的Python 3测试代码中,我有很多这样的语句:

from unittest.mock import patch

user = User(...)
with patch.object(MyAuthenticationClass, 'authenticate', return_value=(user, 'token'):
    # do something
现在我想把它写成:

with request_user(user):
    # do something

我如何编写一个方法
request\u user
作为上下文管理器,以便它以这种方式修补身份验证,并在
使用
块后删除修补程序?

您可以编写一个简单的包装器,如下所示:

def request_user(user):
    return patch.object(MyAuthenticationClass, 'authenticate', return_value=(user, 'token')
并使用它:

with request_user(user):
    # ...

如果不将其注释为
@contextmanager
,则此操作无效。您得到的错误:
AttributeError:\uuu enter\uuu
很好,您把装饰器放在上面了吗?没关系,我错过了实现中的
返回
。它很管用,谢谢!