我正在使用Flask-SQLAlchemy测试一个带有一些SQLAlchemy模型的Flask应用程序,并且我在尝试将一些模型模拟为某些接收某些模型作为参数的方法时遇到了一些问题.
我正在尝试做的玩具版本是这样的.假设我有一个模型给出:
// file: database.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
birthday = db.Column(db.Date)
Run Code Online (Sandbox Code Playgroud)
这是在使用应用工厂模式构建的应用中导入的:
// file: app.py
from flask import Flask
from database import db
def create_app():
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db.init_app(app)
Run Code Online (Sandbox Code Playgroud)
还有一些需要Useras参数的函数:
// file: actions.py
import datetime
SECONDS_IN_A_YEAR = 31556926
def get_user_age(user):
return (datetime.date.today() - user.birthday).total_seconds() // SECONDS_IN_A_YEAR
Run Code Online (Sandbox Code Playgroud)
此外,应用程序中应该导入app.py并注册的几个视图和蓝图,后者在get_user_age某处调用该函数.
我的问题是:我想测试这个功能 get_user_age而无需创建应用程序,注册假数据库等等.这不是必需的,该功能完全独立于它在Flask应用程序中使用的事实.
所以我尝试过:
import unittest
import datetime
import mock …Run Code Online (Sandbox Code Playgroud)