我正在尝试为我正在嘲笑的类设置方法的返回值:foo.pyclass Foo: def bar(self): return {'a': 'b', 'c': 'd'}class Beef: def __init__(self): self.foo = Foo() def run(self): val = self.foo.bar() return val['a']test_foo.pyimport unittestfrom unittest.mock import patchfrom foo import Beefclass TestBeef(unittest.TestCase): @patch('foo.Foo') def test_run(self, mock_foo): mock_foo.bar.return_value = {'a': 'x'} # how to do this? beef = Beef() assert result == {'a': 'x'}这无法模拟该方法。由于这是一个简化的示例,因此我需要模拟整个 Foo 类。在我的实际场景中,有很多初始化代码。如何模拟已被模拟的类的方法?
2 回答
动漫人物
TA贡献1815条经验 获得超10个赞
通过覆盖实例的foo方法来修复它
import unittest
from unittest.mock import patch
from foo import Beef
class TestBeef(unittest.TestCase):
@patch('foo.Foo')
def test_run(self, mock_foo):
beef = Beef()
beef.foo.bar.return_value = {'a': 'x'}
assert result == {'a': 'x'}
慕无忌1623718
TA贡献1744条经验 获得超4个赞
在你的test_foo.py:
import unittest
from unittest import mock
from foo import Beef, Foo
class TestBeef(unittest.TestCase):
def test_run(self):
mock.object.patch(Foo, 'bar', return_value={'a': 'x'})
beef = Beef()
assert result == {'a': 'x'}
添加回答
举报
0/150
提交
取消