首页 > 解决方案 > Python 测试:如何在测试范围之外进行模拟?

问题描述

目前正在处理一些遗留的python代码。我需要测试其中一项功能,function foo. foo现在要做到这一点,我需要模拟由which is调用的另一个函数给出的返回值function bar

然而,这两个都在我的测试包之外,当我尝试模拟时barfoo不受影响。有没有办法做到这一点而不把所有东西都移到一个类中?(这是首选,但它是遗留代码)。

标签: pythonpython-mock

解决方案


一个简单的例子:

foo_and_bar_package/foo_and_bar_module.py

def bar():
    return 5


def foo():
    return 2 * bar()

test_foo_and_bar_module.py

from unittest import TestCase
from unittest.mock import patch

from foo_and_bar_package.foo_and_bar_module import foo


class TestFoo(TestCase):
    @patch('foo_and_bar_package.foo_and_bar_module.bar')
    def test_foo(self, mock_bar):
        mock_bar.return_value = 2
        self.assertEqual(foo.foo(), 2 * mock_bar.return_value)

推荐阅读