pytest-mock如何修补嵌套函数

时间:2020-05-21 10:58:09

标签: python pytest pytest-mock

我有以下代码:

my_module.py

$pull: { "followers": {"_id": new ObjectId(current_id) }

我正在将pytest与pytest-mock和嘲笑者作为test_my_module.py中的装置

test_my_module.py

def my_func(number):
    def nested_func(value):
        '''
        Doing some calculation
        '''
        return result
    output = []
    for i in range(number):
        res = nested_func(i)
        output.append(res)
    return output

但是当我在py.test中运行时,出现错误:

def test_my_module(mocker):
    expected_res = [1, 1, 1]
    mocker.patch('nested_func', return_value=1)

    from my_module import my_func
    assert my_func(3) == expected_res

有什么方法可以模拟ocker.patch函数\方法,这些方法在测试模块中不可见,并且嵌套在该函数中,我想进行测试?

1 个答案:

答案 0 :(得分:0)

作为@MrBean不来梅的后续活动,我认为一种解决方法是在my_func外部定义nested_func并在my_func内调用

def nested_func(value):
   result = value + 2
   return result
def my_func(number):
   output = []
   for i in range(number):
       res = nested_func(i)
       output.append(res)
   return output

您的test_my_module

from my_module import my_func
def test_my_module(mocker):
    expected_res = [1, 1, 1]
    mocker.patch('my_module.nested_func', return_value=1)

    assert my_func(3) == expected_res