Database 在运行测试之前,在Django中创建一个数据库条目
我在Ubuntu13.04上使用Django1.4和Python2.7。我正在处理的Django项目有一个使用Nose和Coverage的完整测试套件。在运行任何测试之前,我需要在数据库中创建一个用户。我在哪里做这个Database 在运行测试之前,在Django中创建一个数据库条目,database,django,unit-testing,Database,Django,Unit Testing,我在Ubuntu13.04上使用Django1.4和Python2.7。我正在处理的Django项目有一个使用Nose和Coverage的完整测试套件。在运行任何测试之前,我需要在数据库中创建一个用户。我在哪里做这个 system_user = User(username=accounts_constants.SYSTEM_USER) system_user.save() 这样做的动机源于“系统机器人”的存在,它处理大量数据库事务。我已经在我们的项目中创建了一个完整的跟踪套件。如果用户更改任何
system_user = User(username=accounts_constants.SYSTEM_USER)
system_user.save()
这样做的动机源于“系统机器人”的存在,它处理大量数据库事务。我已经在我们的项目中创建了一个完整的跟踪套件。如果用户更改任何敏感信息,我们将跟踪它。如果系统进行了这些更改,我们希望在跟踪信息中列出系统用户
代码中有几个地方需要修改以支持此更改。显然,测试数据库没有这个用户。我希望在运行任何测试之前(但在创建数据库之后)添加它
我一直在四处挖掘,但看不到为了测试目的而创建数据库的确切位置。我的第一次尝试是在我们的测试套件runner的初始化中
class CustomTestSuiteRunner(NoseTestSuiteRunner):
"""
Runs testing suite and adds code coverage report.
"""
def __init__(self, *args, **kwargs):
super(CustomTestSuiteRunner, self).__init__(*args, **kwargs)
self.coverage = coverage.coverage()
self.coverage.use_cache(0) # don't use caching with coverage.py
system_user = User(username=accounts_constants.SYSTEM_USER)
system_user.save()
此操作失败,因为它仍在使用开发数据库(此数据库上已存在系统用户)
我尝试在测试序列中进一步添加用户,但似乎找不到合适的位置
任何指示都将不胜感激
编辑1:
girasquid建议的解决方案:
我不想将每个设置
修改为超级自定义测试用例
。相反,我尝试在\uuuu init\uuuu
中执行此操作
class CustomTestCase(TestCase):
def __init__(self, *args, **kwargs):
super(CustomTestCase, self).__init__(*args, **kwargs)
try:
system_user = User.objects.create(
username=accounts_constants.SYSTEM_USER)
system_user.save()
except psycopg2.IntegrityError:
pass
但是我从nose
得到了一个IntegrityError
。你知道为什么会这样吗
lib/python2.7/site-packages/nose/loader.py", line 518, in makeTest
return self._makeTest(obj, parent)
IntegrityError: duplicate key value violates unique constraint "auth_user_username_key"
编辑2:
我们的团队说服我实施一个案例一个案例的设置更改,以包括用户,而不是系统范围的更改。我将在我的测试用例中为此定义:
class MyTestCase(unittest.TestCase):
def setUp(self):
self.system_user = User.objects.create(username=accounts_constants.SYSTEM_USER)
如果你有很多测试用例需要这样做,那么把它放在一个基本的
TestCase
上,然后在所有测试中继承它可能会很有用。是的,这就是我所想的——继承一个基本的测试用例。我想知道是否有更好的地方做这件事。我可能会这么做。谢谢