首页 > 解决方案 > 已模拟的类中的模拟方法

问题描述

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

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

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

标签: pythonpython-unittest

解决方案


在你的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'}

推荐阅读