首页 > 解决方案 > 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

有谁知道我在这里做错了什么?

标签: pythonmockingpython-unittest

解决方案


推荐阅读