慕的地8271018
2024-01-15 15:40:36
我正在嘗試為我正在嘲笑的類設置方法的返回值: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
提交
取消