我在模拟函数时遇到了一些问题。它正在引发ValueError异常,无法模拟该属性
文件夹结构
root
\api
ProjectFolder
ProjectDetails.py
\GetProjectList
main.py
__init__.py
\test
test_projectList.py
__init__.py
我从ProjectDetails.py文件中的类“ProjectList”调用了一个函数“get\u ProjectList”。这是其他文件
main.py
import logging
import azure.functions as func
from api.ProjectFolder.ProjectDetails import *
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Trigger function for get projects list.')
response, status_code = ProjectList().get_ProjectList()
return func.HttpResponse(response,status_code=status_code)
测试项目列表.py
from unittest import mock
import unittest
from GetProjectList.main import *
import azure.functions as func
class Test_ProjectDetails(unittest.TestCase):
def test_ProjectDetails(self):
with mock.patch('api.ProjectFolder.ProjectDetails.ProjectList.get_ProjectList') as mock_get:
mock_get.return_value.status_code = 200
req = func.HttpRequest(
method='GET',
body=None,
url='/GetProjectList'
)
resp = main(req)
expected_status_code = 200
self.assertEqual(resp.status_code,expected_status_code)
if __name__ == '__main__':
unittest.main()
当我运行此命令时,它抛出异常,表示ValueError:没有足够的值从main.py解包(预期为2,得到0),并在响应处显示行,状态\u code=ProjectList().get\u ProjectList()
**复制代码时如果缩进错误,则忽略
行
mock_get.return_value.status_code = 200
使函数的模拟返回只有一个值(整数200)。在主节中,
response, status_code = ProjectList().get_ProjectList()
预计get_ProjectList()
将返回2个值。我建议您更改mock,使其返回2个值,例如:
mock_get.return_value.status_code = (200, 200)
,然后函数的mock将返回一个包含2个参数的元组(就像从原始函数返回2个参数),并且主代码将有一些第二个值需要解包
我通过在测试文件中进行以下更改来实现这一点
相关问题 更多 >
编程相关推荐