【发布时间】: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