Python 在类中封装flask api以进行测试

Python 在类中封装flask api以进行测试,python,api,unit-testing,flask,encapsulation,Python,Api,Unit Testing,Flask,Encapsulation,我过去曾构建过flask API,但我从未享受过在一个项目中的奢侈,在这个项目中,我被允许在进行测试驱动开发的同时进行测试驱动开发。现在我是 我读过的每一个how-to都显示FlaskAPI是以一种绝对非面向对象的风格定义的。这使得编写单元测试非常困难,因为无法将可选参数或测试特定参数传递到实例化的api中 例如,本博客解释了为flask api创建单元测试的一种方法: 博客在测试模式下设置一个环境变量,脚本监视该变量,并在找到该变量时改变其行为。这对我来说似乎很不明智。让源代码流入操作系统环

我过去曾构建过flask API,但我从未享受过在一个项目中的奢侈,在这个项目中,我被允许在进行测试驱动开发的同时进行测试驱动开发。现在我是

我读过的每一个how-to都显示FlaskAPI是以一种绝对非面向对象的风格定义的。这使得编写单元测试非常困难,因为无法将可选参数或测试特定参数传递到实例化的api中

例如,本博客解释了为flask api创建单元测试的一种方法:

博客在测试模式下设置一个环境变量,脚本监视该变量,并在找到该变量时改变其行为。这对我来说似乎很不明智。让源代码流入操作系统环境是个坏主意的原因有很多。我非常相信封装功能是为了最大限度地提高可移植性,并在模块的开始和结束之间划清界限

为了满足我的编码理念,有人可能会建议我将FlaskAPI封装在一个类中。然而,我不清楚人们会如何做这样的事情。例如,Flask使用装饰器来定义路由:

@app.route()
这怎么能适合一个班级呢


我非常感谢任何以面向对象方式开发flask api的人的指导。

您可以用
添加url\u规则
取代
@app.route

举个例子:

from flask import Flask

class MyFlaskApp:

    def __init__(self):
        self.app = Flask(__name__)
        self.app.add_url_rule('/', 'index', self.index)

    def index(self):
        pass
这类似于:

from flask import Flask
app = Flask(__name__)

@app.route('/index')
def index():
    pass

您可以将
@app.route
的使用替换为
添加url\u规则

举个例子:

from flask import Flask

class MyFlaskApp:

    def __init__(self):
        self.app = Flask(__name__)
        self.app.add_url_rule('/', 'index', self.index)

    def index(self):
        pass
这类似于:

from flask import Flask
app = Flask(__name__)

@app.route('/index')
def index():
    pass
看一看,看一看