单元测试和app的Flask初始化

2024-04-30 01:47:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个烧瓶应用程序,我想运行一些单元测试。为此,我创建了一个新的Flask对象,初始化blueprints、SQLA和一些其他包,并执行测试用例。在

但是,我注意到test flask对象上的一些端点丢失了,这使我想知道在flask中如何处理初始化的一般方法。在

举一个最小的例子,端点的创建方式如下:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

如果我要在testcase的setUp方法中的某个地方创建一个新的Flask对象,那么它肯定不会包含路由“/”,因为这个路由是从另一个Flask对象(上面文件中的对象)创建的。所以我的问题是:测试用例应该如何编写,初始化通常是如何工作的?我在某个地方读到,应该避免在导入时初始化(即在模块级别),但如果使用注释,这似乎是不可能的。在


Tags: 对象方法nameapp应用程序flask路由烧瓶
1条回答
网友
1楼 · 发布于 2024-04-30 01:47:54

您不需要在测试用例中创建新的Flask对象。您可以导入现有的app,而不是。在

在许多项目设置中,您已经将所有扩展添加到app。在我的许多产品中,我都有一个工厂方法,它将获取一个配置对象并为我返回完全初始化的app对象;我使用这个方法来创建一个基本测试用例:

import unittest

import project


class Config(object):
    DEBUG = False
    TESTING = True
    CACHE_NO_NULL_WARNING = True  # silence Flask-Cache warning
    SECRET_KEY = 'SECRET_KEY'


class ProjectCoreViewCase(unittest.TestCase):
    """Base test case for the Project core app"""

    def setUp(self, **kwargs):
        config = Config()
        config.__dict__.update(kwargs)
        app = project.create_app(config)
        self.app = app.test_client()

任何测试都可以在所有测试中使用self.app作为测试客户端。在

这是一个基本测试用例,您可以从它继承;setUp()方法允许设置额外的配置,方法是向super()调用传递关键字参数:

^{pr2}$

相关问题 更多 >