【发布时间】:2019-06-18 10:04:40
【问题描述】:
在我的应用程序中,我有一个从烧瓶服务调用的类。这个类从 flask.request 对象中获取一些属性,所以我想模拟它们。
我的一个实现示例是:
myClassHelper.py
from flask import request
class MyClassHelper:
def __init__(self, addRequestData=False):
self.attribute = 'something'
self.path = request.path if addRequestData else None
def __str__(self):
return 'attribute={0}; path={1};'.format(self.attribute, self.path)
myClassHelperTest.py
from unittest import TestCase
from unittest.mock import MagicMock
import flask
from myClassHelper import MyClassHelper
class MyClassHelperTest(TestCase):
def setUp(self):
self.path = '/path'
self.unmock = {}
self.unmock['flask.request'] = flask.request
flask.request = MagicMock(path='/path')
def tearDown(self):
flask.request = self.unmock['flask.request']
def test_printAttributes(self):
expectedResult = 'attribute=something; path={0};'.format(self.path)
result = str(MyClassHelper(addRequestData=True))
self.assertEqual(expectedResult, result)
当我导入from myClassHelper import MyClassHelper 时,问题就来了。这将转到 MyClassHelper 中的导入 from flask import request。所以测试类的setUp方法中的mock,并没有被应用。
这可以通过导入flask 并访问flask.request.path 之类的路径属性来解决。但我想避免导入完整的烧瓶模块。
有没有办法为使用来自 flask.request 的属性的方法创建单元测试,模拟它们而不使用烧瓶测试客户端?
【问题讨论】:
标签: python flask mocking python-import python-unittest