模拟已模拟的类中的方法

我正在尝试为我正在嘲笑的类设置方法的返回值:


foo.py


class 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.py


import unittest

from unittest.mock import patch


from foo import Beef


class 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 类。在我的实际场景中,有很多初始化代码。


如何模拟已被模拟的类的方法?


慕的地8271018
浏览 125回答 2
2回答

动漫人物

通过覆盖实例的foo方法来修复它import unittestfrom unittest.mock import patchfrom foo import Beefclass 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

在你的test_foo.py:import unittestfrom unittest import mockfrom foo import Beef, Fooclass TestBeef(unittest.TestCase):      def test_run(self):        mock.object.patch(Foo, 'bar', return_value={'a': 'x'})        beef = Beef()        assert result == {'a': 'x'}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python