【问题标题】:How does one mock.patch a function inside a Flask Blueprint?如何在 Flask 蓝图中 mock.patch 一个函数?
【发布时间】:2020-05-18 07:34:06
【问题描述】:

我正在尝试使用 unittest.mock 库来修补 Flask 蓝图中的函数。具体来说,我正在尝试修补蓝图中的os 模块。简化代码(不能提供全部/实际代码):

test_route.py(我正在尝试运行的测试)

import unittest
from unittest import mock

from server.index import create_app as Server

class TestRoute(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.server = Server()
        cls.server.config['TESTING'] = True
        cls.client = cls.server.test_client()
        #
        # more code...
        #
    @mock.patch('server.routes.blueprint.os')
    def test_route(self, mockOS):
        mockOS.listdir.return_value = ['/mockedvalue']
        res = client.post('/some/url')
        #
        # more code...
        #

server/index.py(创建 Flask 服务器的模块)

from flask import Flask
from routes.blueprint import bp

def create_app():
    app = Flask(__name__)
    app.register_blueprint(bp)
    #
    # more code...
    #

server/routes/blueprint.py(Flask 服务器使用的蓝图逻辑)

import os
from flask import Flask, Blueprint

bp = Blueprint('bp', __name__)

@bp.route('/some/url')
def run():
    #
    # code...
    #

    dirs = os.listdir('/some/path')    

    #
    # more code...
    #

当我运行它时,os.listdir() 没有得到修补。当我真正想要的是模拟值时,我得到了 '/some/path' 的实际内容:

    Actual   : ['/something1', '/some/other/thing', ...]
    Expected : ['/mockedvalue']

我已阅读 https://docs.python.org/3/library/unittest.mock.html#where-to-patch ,但也许我仍然犯了一个错误。在蓝图模块上打补丁似乎是合适的,但如果这是不正确的,任何指导或更正将不胜感激。

【问题讨论】:

    标签: python flask python-unittest python-mock


    【解决方案1】:

    如果你设置会发生什么

        @mock.patch('server.routes.blueprint.os')
        def test_route(self, mockOS):
            with Server.app.app_context():        
                mockOS.listdir.return_value = ['/mockedvalue']
                res = client.post('/some/url')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 2020-01-24
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      相关资源
      最近更新 更多