【发布时间】:2013-11-11 22:21:05
【问题描述】:
Django 1.5 关于测试的文档说:
在运行测试时从生产数据库中查找数据?
如果您的代码在编译模块时尝试访问数据库,这将在设置测试数据库之前发生,可能会导致意外结果。例如,如果您有一个在模块级代码中 的数据库查询并且存在一个真实的数据库,则生产数据可能会污染您的测试。无论如何,在您的代码中包含这样的导入时数据库查询是一个坏主意 - 重写您的代码,使其不会这样做。
谁能解释一下我看不懂的粗体字。谢谢你。
【问题讨论】:
Django 1.5 关于测试的文档说:
在运行测试时从生产数据库中查找数据?
如果您的代码在编译模块时尝试访问数据库,这将在设置测试数据库之前发生,可能会导致意外结果。例如,如果您有一个在模块级代码中 的数据库查询并且存在一个真实的数据库,则生产数据可能会污染您的测试。无论如何,在您的代码中包含这样的导入时数据库查询是一个坏主意 - 重写您的代码,使其不会这样做。
谁能解释一下我看不懂的粗体字。谢谢你。
【问题讨论】:
您正在阅读:http://djbook.ru/rel1.5/topics/testing/overview.html
这看起来像是那些可能包含尴尬段落的协作在线书籍之一。
首先,你的设置文件建立一个数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'myDB' ...
当您运行测试时,测试运行器会读取该名称,在“test_”前面添加“test_myDB”,并创建一个空白数据库供测试使用。
但测试运行器仅在模块加载后才执行此操作(不是“编译”)。所以...
from django.test import TestCase
# Don't use the database here; it's still myDB
class SimpleTest(TestCase):
def setUp(self):
# We are all about the test_myDB database, here
self.user = User.objects.create_user(
username='zaphod',
email='zaphod@...',
password='beeblebrox',
)
另一个细节:除非你很疯狂,并且直接在生产服务器上进行开发和测试,否则 myDB 不是“生产数据库”。更好的名称是“开发数据库”。
【讨论】:
production,他们也可能意味着staging。