我正在为Django应用程序编写测试用例。我想为不同的测试用例使用不同的数据库。因此,我想覆盖特定测试用例的默认数据库设置。
e.g。
class FooTest(TestCase):
fixtures = ['df_fixtures1.json']
def setUp(self):
print "SETTING UP?"
def tearDown(self):
print "Tear Down"
@override_settings(DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'})
def do_foo_related(self):
Foo task.....
pass
这不起作用,但这就是我想要的。无论如何都要做这样的事情吗?
编辑:我正在使用django1.5
答案 0 :(得分:2)
您需要覆盖_pre_setup和_post_teardown方法。事实上,有一个python包用于完全相同的目的,它为Django提供了对不同数据库的测试支持。如果它符合您的目的,您可以使用它,否则它无论如何都可以用作参考。
Pypi Link: -
文档: -
答案 1 :(得分:1)
理想情况下,您应该像这样定义test_settings.py
文件
from settings import *
......
override whatever you want here
......
然后将manage.py
更改为此类
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
test_settings = 'test_settings'
settings = test_settings if 'test' in sys.argv else 'settings'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", settings)
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
这将确保仅使用test_settings运行测试用例,以避免对主数据库产生任何副作用。