繁体   English   中英

Flask - 测试应用程序上下文的单元测试

[英]Flask - Unit Test with testing app context

我在db.db.Db下有以下模块,它位于Flask应用程序中。 它使用app.config变量连接数据库,在编写单元测试用例时如何覆盖这些设置? 如何从Flask获得具有虚拟配置变量的不同应用程序上下文?

import psycopg2


class Db(object):
    def __init__(self):
        import app
        conn_string = "host='{}' port='{}' dbname='{}' user='{}' password='{}'".format(app.app.config['DB_HOST'], \
                      app.app.config['DB_PORT'], app.app.config['DB_NAME'], app.app.config['DB_USER'], \
                      app.app.config['DB_PASSWORD'])
        self.conn = psycopg2.connect(conn_string)

    def __del__(self):
        self.conn.close()

常见的模式是使用函数创建应用程序 ,而不是在导入时创建单个应用程序实例。

如果您只是在请求上下文中访问数据库,那么您可以使用flask.current_app来访问当前的应用程序上下文。

例如:

from flask import current_app
import psycopg2


class Db(object):
    def __init__(self):
        conn_string = "host='{}' port='{}' dbname='{}' user='{}' password='{}'".format(current_app.config['DB_HOST'], \
                      current_app.config['DB_PORT'], current_app.config['DB_NAME'], current_app.config['DB_USER'], \
                      current_app.config['DB_PASSWORD'])
        self.conn = psycopg2.connect(conn_string)

    def __del__(self):
        self.conn.close()

然后你的测试可以创建自己的应用程序,并将配置值更改为他们喜欢的任何值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM