python - Unittest - 通过@patch 模拟对象和方法的返回值
问题描述
我在使用Python 中的patch
装饰器模拟对象方法的返回值时遇到问题。unittest.mock
一个最小的例子是这样的:
dummy_objects.py:
class DummyObject:
def foo(self, int):
return f"foo-{int}-"
def bar(self, int):
return f"bar-{int}-"
test_dummy.py:
import unittest
from unittest.mock import patch, Mock
import dummy_objects as do
dummy_patch = Mock(spec=do.DummyObject)
dummy_patch.foo.return_value = "9999"
@patch("dummy_objects.DummyObject", new=dummy_patch)
class TestCaseOne(unittest.TestCase):
def test_patching_foo(self):
tmp = do.DummyObject()
self.assertEqual(tmp.foo(), "9999")
tmp.foo()
由于补丁装饰器,我希望返回“9999”。但是,我得到了一个新的 MagicMock,如输出所示:
Ran 1 test in 0.006s
FAILED (failures=1)
9999 != <Mock name='mock().foo()' id='2087245816552'>
Expected :<Mock name='mock().foo()' id='2087245816552'>
Actual :9999
有谁知道我在这里做错了什么?
解决方案
推荐阅读
- android - 如何将“2019-02-10T19:30:00+00:00”日期格式转换为“19:30”
- android - 为什么我的应用程序按钮会混合并更改其位置?
- django - Django CreateAPIView 不显示创建表单
- winapi - 如何使用 LoadImage 选择图标颜色深度?
- database - 配置 Unifi 控制器以使用外部 MongoDB 数据库 - 可能的角色问题?
- kubernetes - Kubernetes 将自己的域名附加到所有请求
- arrays - 迅速。从对象内部获取对象
- linux - 以前错误的未对齐呼叫现在工作了吗?
- javascript - 窗口大小改变时保持viewBox的比例
- regex - 用于嵌套 XML 标记的 PowerShell 正则表达式