我有一个可以正常运行的模拟程序。
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次。
我在这里想念什么?
我尝试了几种不同的格式化方式,但是似乎都没有用。在这种情况下,这甚至是用于单元测试的最佳实践/软件包吗?
答案 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')
。