【问题标题】:Mock patch unable to find the path模拟补丁找不到路径
【发布时间】:2020-12-30 15:15:20
【问题描述】:

我在模拟函数时遇到了一些问题。它抛出 ValueError 异常并且无法模拟属性。

文件夹结构

root
     \api
         ProjectFolder
              ProjectDetails.py
      \GetProjectList
         main.py
         __init__.py
      \test
         test_projectList.py
         __init__.py

我正在从 ProjectDetails.py 文件中的类“ProjectList”调用一个函数“get_ProjectList”。这是其他文件。

ma​​in.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)

test_projectList.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: not enough values to unpack (expected 2, got 0) from ma​​in.py 并在 response , status_code = ProjectList().get_ProjectList()

**如果复制代码时出现缩进错误则忽略

【问题讨论】:

    标签: python python-3.x visual-studio-code azure-functions


    【解决方案1】:

    mock_get.return_value.status_code = 200 行使函数的模拟只返回一个值(整数 200)。
    在主要部分中,response, status_code = ProjectList().get_ProjectList() 预计 get_ProjectList() 将返回 2 个值。
    我建议您更改模拟,使其返回 2 个值,例如:
    mock_get.return_value.status_code = (200, 200),
    然后函数的模拟将返回 2 个参数的元组(如从原始函数返回 2 个参数),并且主代码将有一些第二个值需要解压。

    【讨论】:

    • 我在传递两个参数的元组时遇到同样的错误。
    【解决方案2】:

    我通过测试文件中的以下更改完成了这项工作。

    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('GetProjectList.main.ProjectList.get_ProjectList') as mock_get:
        
                   mock_get.return_value = (<message>,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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 2012-02-03
      相关资源
      最近更新 更多