python - 函数的monkeypatching中的setattr抛出属性错误
问题描述
我有以下代码
/tests/test_fixme.py
def make_my_patch():
name = "Dinesh"
return name
def test_make_patch(monkeypatch):
monkeypatch.setattr(make_my_patch,"name","DineshKumar")
使用setattr
设置name
会引发属性错误。
注意:我已将这两个函数作为权宜之计放在同一个文件中,以避免模块/导入错误。
这是追溯。
================================================================== FAILURES ==================================================================
______________________________________________________________ test_make_patch _______________________________________________________________
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fddd5675630>
def test_make_patch(monkeypatch):
> monkeypatch.setattr(make_my_patch,"name","DineshKumar")
E AttributeError: <function make_my_patch at 0x7fddd5676048> has no attribute 'name'
tests/test_fixme.py:16: AttributeError
========================================================== short test summary info ===========================================================
FAILED tests/test_fixme.py::test_make_patch - AttributeError: <function make_my_patch at 0x7fddd5676048> has no attribute 'name'
============================================================= 1 failed in 0.02s ==============================================================
(testenv) user@user:~/MyGitHub/MyLearning/Python/MyUnitTests/Testing10$
如何正确修补名称属性?但是,如果我将代码放在一个类中,类变量的 setattr 就可以正常工作吗?您能否解释一下为什么它不适用于功能?
解决方案
万一有人在这里结束。
您需要返回一个具有返回值的模拟对象,因此您的代码将类似于:
from unittest.mock import Mock
def make_my_patch():
name = "Dinesh"
return name
def test_make_patch(monkeypatch):
monkeypatch.setattr(
make_my_patch,
Mock(return_value="DineshKumar")
)
推荐阅读
- javascript - 移除业务流程的展开事件
- ios - 如何在 CFBundleDisplayName、IOS 中插入空间
- wso2 - OIDC 的私钥 JWT 客户端身份验证:找不到 client_id 的有效 OAuth 客户端
- javascript - 如何在图表的中心添加文本 js 圆环图
- python - 训练 keras 开始时挂起
- php - 如何使用 reactjs 和 php 将图像上传到数据库?
- laravel - [Route: verify.verify] [URI: {locale}/email/verify/{id}/{hash}] 缺少必需的参数
- vb.net - 使用 BinaryReader 读取不会更新 TextBox
- python-3.x - 模块“tensorflow”没有属性“random_uniform”
- appstore-approval - 苹果登录被拒绝