我正在尝试在Django应用程序上进行一些测试。我已经为测试数据库使用了数据库镜像。当我尝试运行少量测试时,似乎“默认数据库”中的数据在镜像测试数据库中不可用。
'default': { #'sqlite': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'OPTIONS':{
'timeout': 180,
},
# 'TEST':{
# 'MIRROR': 'default',
#
# }
},
'replica': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'OPTIONS':{
'timeout': 180,
},
'TEST_MIRROR': 'default'
}
Run Code Online (Sandbox Code Playgroud)
我的测试:
data_school = DataSchool.objects.all()
self.assertTrue(data_school.exists())
Run Code Online (Sandbox Code Playgroud)
我很困惑,数据库管理员将test_mirrors配置为默认数据库的只读副本。理论上,默认数据库中的任何数据都可以用于测试吗?如果我有任何配置错误,请告诉我们。谢谢
这是Django中的一个已知错误:https : //code.djangoproject.com/ticket/23718
该票证中描述的解决方法是您最好的选择。我遇到了同样的问题,并通过定义自定义TestCase类并在所有测试中从该自定义测试用例继承来实现了变通方法。我还选择使用setUpClass和tearDownClass代替错误票证中所述的setUp和tearDown。无论哪种都可以。
from django.db import connections
class CustomTestCase(TestCase):
@classmethod
def setUpClass(cls):
super(CustomTestCase, cls).setUpClass()
connections['replica']._orig_cursor = connections['replica'].cursor
connections['replica'].cursor = connections['default'].cursor
@classmethod
def tearDownClass(cls):
connections['replica'].cursor = connections['replica']._orig_cursor
super(CustomTestCase, cls).tearDownClass()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
935 次 |
| 最近记录: |