使用测试数据库隔离测试
每次测试运行使用一个临时 DB
使用测试数据库隔离测试 是 CoddyKit 上的免费 Flask Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Flask Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Flask Academy 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
Why Isolate the Database
Tests must never touch your real data. A test database keeps every run clean, so one test can never corrupt another or your production rows.
Use a Throwaway SQLite DB
The easy choice is an in-memory SQLite database. It lives only in RAM and vanishes the moment the test process ends.
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'Flip on Testing Config
Set TESTING to True before tests run. It turns off error catching so exceptions surface clearly in your output.
app.config['TESTING'] = TrueBuild a Fresh Schema
Inside an app context, call db.create_all(). It builds every table from your models so each test run starts from an empty schema.
with app.app_context():
db.create_all()Tear Down After Tests
After the test, call db.drop_all() to remove every table. This guarantees the next run cannot inherit leftover rows.
with app.app_context():
db.drop_all()Put It in a Fixture
Wrap setup and teardown in one fixture. The code before yield creates the schema; the code after it drops everything cleanly.
@pytest.fixture
def app_db():
db.create_all()
yield
db.drop_all()Seed Sample Data
Many tests need a known row to read. Add a record in the fixture, then commit it so the test starts from a predictable state.
db.session.add(User(name='Ada'))
db.session.commit()Why Fresh State Matters
Tests should pass in any order. Isolation means each test sees the same starting data, so results never depend on what ran before.
Roll Back Between Tests
An alternative to recreating tables is a rollback. Wrap each test in a transaction and undo it afterward for a fast, clean slate.
db.session.rollback()Keep Test Config Separate
Store test settings in a dedicated TestConfig class. Your factory loads it only during tests, never in development or production.
class TestConfig:
TESTING = True
SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'Never Test Against Prod
Always double-check the URI points at a test database. Pointing tests at production data is the fastest way to lose real records.
Quick Check
You want tests that never harm real data. What database do you use?
Recap: Test Database
You spin up a clean test database, seed known data, and tear it down after. Now your tests are fast, repeatable, and safe. 🗄️
常见问题解答
「使用测试数据库隔离测试」课时是免费的吗?
是的 — 「使用测试数据库隔离测试」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Flask Academy 课程的其余内容,请升级到 CoddyKit PRO。 Flask Academy 课程共包含 4 节课。
「使用测试数据库隔离测试」这节课中我会学到什么?
每次测试运行使用一个临时 DB 你通过在浏览器中直接运行的动手代码来练习 Flask Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Flask Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Flask Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「使用测试数据库隔离测试」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Flask Academy 课中编写并运行代码吗?
能。每节 Flask Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 测试客户端与测试夹具
- 断言路由与 JSON
- 使用测试数据库隔离测试
- 测试需要身份验证的端点