Python 编写修补对象的contextmanager
在我的Python 3测试代码中,我有很多这样的语句: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
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
很好,您把装饰器放在上面了吗?没关系,我错过了实现中的返回
。它很管用,谢谢!