Python 来自另一个的模拟补丁 File/Module
Python Mock Patch From Another File/Module
我有一个模拟,可以正常工作。
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: Expected 'second' to have been called once。调用 0 次。
我在这里错过了什么?
我尝试了几种不同的格式设置方式,但 none 似乎行得通。在这种情况下,这甚至是最好的单元测试 practice/package 吗?
别担心,你走在正确的道路上,这就是模拟函数的方式。
关于您的问题,请记住您根据调用模拟函数的函数修补命名空间。
因此,当您在模块 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')
.
我有一个模拟,可以正常工作。
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: Expected 'second' to have been called once。调用 0 次。
我在这里错过了什么?
我尝试了几种不同的格式设置方式,但 none 似乎行得通。在这种情况下,这甚至是最好的单元测试 practice/package 吗?
别担心,你走在正确的道路上,这就是模拟函数的方式。
关于您的问题,请记住您根据调用模拟函数的函数修补命名空间。
因此,当您在模块 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')
.