为了账号安全,请及时绑定邮箱和手机立即绑定

模拟已模拟的类中的方法

模拟已模拟的类中的方法

慕的地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'}


查看完整回答
反对 回复 2024-01-15
?
慕无忌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'}


查看完整回答
反对 回复 2024-01-15
  • 2 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信