0

我正在尝试使用夹具数据运行测试,并得到臭名昭著的IntegrityError: column user_id is not unique错误。

现在,查看我的灯具,我可以看到我的灯具中的用户模型的 id 彼此之间是唯一的。我推断冲突与(非测试)数据库中的现有数据发生冲突。这个对吗?(编辑:这似乎是不正确的 - 见下文)

我希望能够准确控制哪些数据可用于我的测试。有没有办法阻止 django testrunner 从我的实时数据库中加载数据,以及我的夹具数据?(编辑:是的 - 见 Thibaut 的回答)。

编辑:根据 Thibaut 的回答,切换到使用干净的内存数据库并不能解决问题。因此,我推断我现有的开发数据库不是问题。

所以,我有第三个问题:在测试期间加载夹具时如何诊断 IntegrityError 的原因?(而且,我该如何解决?)

编辑 2:我的问题的解决方案,除了从一个干净的数据库开始(根据 Thibault J)之外,还从安装的应用程序中删除引用用户的模型,直到错误不再发生。

DrTyrsa 的另一个建议(除了查看数据)是使用自然键,这对于 User 无疑需要一定数量的猴子补丁或其他黑客(编辑 User 的代码?)。

4

1 回答 1

0

为产品和测试使用不同的数据库(良好实践)。在settings.py

if 'test' in sys.argv:                                                          
    try:                                                                        
        from test_settings import *                                             
    except ImportError:                                                         
        pass

test_settings.py

DATABASES = {                                                                   
    'default': {                                                                
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'memory://testdb',
    }                                                                           
}
于 2011-12-07T10:16:02.273 回答