Python 测试:如何在测试范围之外进行模拟?
Python testing: How do I mock outside of the testing scope?
目前正在处理一些遗留 python 代码。我需要测试其中一个功能 function foo
。现在要做到这一点,我需要模拟 foo
调用的另一个函数给出的 return 值,即 function bar
.
然而,这两个都在我的测试包之外,当我尝试模拟 bar
时,foo
不受影响。有没有一种方法可以在不将所有内容都移动到 class 的情况下执行此操作? (这是首选,但它是遗留代码)。
一个简单的例子:
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)
目前正在处理一些遗留 python 代码。我需要测试其中一个功能 function foo
。现在要做到这一点,我需要模拟 foo
调用的另一个函数给出的 return 值,即 function bar
.
然而,这两个都在我的测试包之外,当我尝试模拟 bar
时,foo
不受影响。有没有一种方法可以在不将所有内容都移动到 class 的情况下执行此操作? (这是首选,但它是遗留代码)。
一个简单的例子:
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)