2

关于测试的 Django 1.5 文档说:

运行测试时从生产数据库中查找数据?

如果您的代码在编译其模块时尝试访问数据库,这将在设置测试数据库之前发生,可能会导致意外结果。例如,如果您在模块级代码中有一个数据库查询并且存在一个真实的数据库,那么生产数据可能会污染您的测试。无论如何,在您的代码中包含此类导入时数据库查询是一个坏主意- 重写您的代码,使其不会这样做。

有人可以解释我无法理解的粗体文本。谢谢你。

4

1 回答 1

2

您正在阅读: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 不是“生产数据库”。更好的名称是“开发数据库”。

于 2013-11-02T05:41:46.100 回答