您能帮我弄清楚我做错了什么吗?我对python lambdas进行了以下单元测试
class Tests(unittest.TestCase):
def setUp(self):
//some setup
@mock.patch('functions.tested_class.requests.get')
@mock.patch('functions.helper_class.get_auth_token')
def test_tested_class(self, mock_auth, mock_get):
mock_get.side_effect = [self.mock_response]
mock_auth.return_value = "some id token"
response = get_xml(self.event, None)
self.assertEqual(response['statusCode'], 200)
问题是,当我运行此代码时,我收到get_auth_token
的以下错误:
Invalid URL '': No schema supplied. Perhaps you meant http://?
我调试了它,但看起来好像我没有正确打补丁。授权帮助程序文件与测试的类位于同一文件夹“功能”中。
编辑: 在tested_class中,我像这样导入get_auth_token:
from functions import helper_class
from functions.helper_class import get_auth_token
...
def get_xml(event, context):
...
response_token = get_auth_token()
更改为此后,它开始正常工作
import functions.helper_class
...
def get_xml(event, context):
...
response_token = functions.helper_class.get_auth_token()
我仍然不完全理解为什么
答案 0 :(得分:1)
在tested_class.py
中,get_auth_token
已导入
from functions.helper_class import get_auth_token
补丁应与get_auth_token
上的tested_class
完全相同
@mock.patch('functions.tested_class.get_auth_token')
具有以下用法
response_token = functions.helper_class.get_auth_token()
唯一的修补方法是
@mock.patch('functions.helper_class.get_auth_token')
在tested_class
中使用这样的导入
from functions import helper_class
helper_class.get_auth_token()
补丁可能是这样的:
@mock.patch('functions.tested_class.helper_class.get_auth_token')
答案 1 :(得分:0)
patch()通过(临时)将名称指向的对象更改为另一个对象来工作。可以有许多名称指向任何单个对象,因此要进行修补,必须确保对被测系统使用的名称进行修补。
基本原理是,您修补查找对象的位置,该对象不一定与定义对象的位置相同。
Python文档有一个很好的例子。 where to patch