我有这样的代码:单独使用内存数据库进行测试 - 如何?
my_app.py:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
import os
app = Flask(__name__)
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
app.config["BASE_DIR"] = os.path.abspath(os.path.dirname(__file__))
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///" + os.path.abspath(os.path.join(app.config["BASE_DIR"], "app.db"))
db = SQLAlchemy(app)
from user import User
# create all tables
db.create_all()
if not User.query.filter_by(username="test").first():
dummy_user = User(username="test", password="", email="")
db.session.add(dummy_user)
db.session.commit()
user.py:
from flask.ext.login import UserMixin
from my_app import db
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(255), nullable=False, unique=True)
email = db.Column(db.String(255), nullable=False, unique=True)
password = db.Column(db.String(255), nullable=False)
tests.py:
from flask.ext.testing import TestCase
from my_app import app, db
from user import User
import os
import unittest
class MyTestCase(TestCase):
def create_app(self):
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///:memory:"
app.config["TESTING"] = True
return app
def setUp(self):
db.create_all()
def tearDown(self):
db.session.remove()
db.drop_all()
def test_dummy(self):
assert User.query.count() == 0
if __name__ == '__main__':
unittest.main()
如何使单元测试工作?
我想我的单元测试使用的内存数据库从主应用程序分开,但显然我不能做我试图(通过只是改变了SQLALCHEMY_DATABASE_URI值)
感谢的方式提前!
在这里有一些有用的位:http://flask.pocoo.org/docs/0.10/config/#development-production – reptilicus
我不认为这对我的问题有帮助。我已经定义了一个不同于用于生产的配置。 – CryNickSystems
你叫'create_app'吗? – dirn