来自另一个文件/模块的Python模拟补丁

时间:2019-07-08 17:00:20

标签: python mocking pytest pytest-mock

我有一个可以正常运行的模拟程序。

from mock import patch

def second(arg):
    return 3


def first():
    return second('arg')


@patch('test.second')
def test_test(second_mock):
    second_mock.return_value = 47  # We decide this

    call_it = first()

    second_mock.assert_called_once()
    second_mock.assert_called_with('arg')

    assert call_it == 47

但是如果我将second()方法移到另一个文件中就不会了...

from mock import patch
from test_help import second


def first():
    return second('arg')


@patch('test_help.second')
def test_test(second_mock):
    second_mock.return_value = 47  # We decide this

    call_it = first()

    second_mock.assert_called_once()
    second_mock.assert_called_with('arg')

    assert call_it == 47

我遇到相同的错误:AssertionError:预期“秒”被调用一次。叫了0次。

我在这里想念什么?

我尝试了几种不同的格式化方式,但是似乎都没有用。在这种情况下,这甚至是用于单元测试的最佳实践/软件包吗?

1 个答案:

答案 0 :(得分:1)

别担心,您在正确的道路上,这是模拟函数的方式。

关于探测,请记住,您是根据调用模拟函数的函数对名称空间进行修补的。

因此,当您在模块module_where_first_is_located中进行导入from test_help import second时,秒被识别为module_where_first_is_located.second

因此,不用@patch('test_help.second')来进行@patch('module_of_first.second')