【发布时间】:2021-09-30 12:08:03
【问题描述】:
我有一个使用全局对象 data_loader 的烧瓶应用程序。
主要的烧瓶文件(我们称之为main.py)开始如下:
app = Flask('my app')
...
data_loader = DataLoader(...)
稍后,这个全局 data_loader 对象在 webserver 的路由方法中被调用:
class MyClass(Resource):
def get(self):
data_loader.load_some_data()
# ... process data, etc
使用unittest,我希望能够修补load_some_data() 方法。我正在使用烧瓶test_client:
from my_module.main import app
class MyTest(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.client = app.test_client('my test client')
如何在MyTest 的后续测试中修补data_loader 方法?我已经尝试过这种方法,但它不起作用(尽管data_loader 似乎在某些时候被替换了):
@unittest.mock.patch('my_module.main.DataLoader')
def my_test(self, DataLoaderMock):
data_loader = DataLoaderMock.return_value
data_loader.my_method.return_value = 'new results (patched)'
with app.test_client() as client:
response = client.get(f'/some/http/get/request/to/MyTest/route',
query_string={...})
# ... some assertions to be tested ...
似乎data_loader 在 Flask 应用程序中从未真正被替换。
另外,在 Flask 服务器中有一个全局变量是否被认为是“好习惯”,还是应用程序应该将它存储在里面?
谢谢
【问题讨论】:
-
谢谢。祝你好运 ???? ??????
标签: flask mocking python-unittest