Python 3.x 如何测试顶级方法?

Python 3.x 如何测试顶级方法?,python-3.x,testing,Python 3.x,Testing,我有类似的情况: def my_fun(x): # do some stuff to x and put it in y y = x+1 heavy_function(y) 重载函数是一个非常复杂的计算。我只想在test\u my\u fun中测试my\u fun的顶部,而重功能可以通过自己的测试方法进行测试 我知道我可以将相关的my_fun提取到第三个函数中,然后进行测试,但这似乎会不必要地使我的代码库复杂化。我更愿意将一个假的重载函数传递给my\u fun,该函数

我有类似的情况:

def my_fun(x):
    # do some stuff to x and put it in y
    y = x+1

    heavy_function(y)
重载函数
是一个非常复杂的计算。我只想在
test\u my\u fun
中测试
my\u fun
的顶部,而
重功能
可以通过自己的测试方法进行测试

我知道我可以将相关的
my_fun
提取到第三个函数中,然后进行测试,但这似乎会不必要地使我的代码库复杂化。我更愿意将一个假的
重载函数
传递给
my\u fun
,该函数给出(例如)用于测试
my\u fun
的输入的预计算结果

这可以用Python实现吗?

您看过Python吗。您可以这样做:

from unittest import mock

def test_my_fun(self):
    with mock.patch(`file_path.heavy_function`, return_value = foo):
        self.assertEqual(my_fun(x), bar)

这将模拟出您想要的任何函数,以便您可以将预期的返回值与您期望的整体返回值进行比较。

您可以重构
my\u-fun
,以便它接受函数参数,通常您会传递它
重函数
,但是您可以为它传递一些虚拟函数以进行测试。还记得bash中的
--dry run
参数吗?这也可能是一种模式。