【问题标题】:Django test. Finding data from your production database when running tests?姜戈测试。运行测试时从生产数据库中查找数据?
【发布时间】:2013-11-11 22:21:05
【问题描述】:

Django 1.5 关于测试的文档说:

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

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

谁能解释一下我看不懂的粗体字。谢谢你。

【问题讨论】:

    标签: django testing document


    【解决方案1】:

    您正在阅读: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
    • 除非你疯了,并且直接在你的登台服务器上进行开发和测试,否则 myDB 也不是“登台数据库”... C-;
    • 我的意思是你可以在你的开发服务器上进行开发和测试,然后你可以部署到你的登台服务器上并在那里再次运行测试,以确保一切在该环境中仍然有效,然后再将其部署到生产服务器。
    猜你喜欢
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多