Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在运行测试之前,在Django中创建一个数据库条目_Database_Django_Unit Testing - Fatal编程技术网

Database 在运行测试之前,在Django中创建一个数据库条目

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() 这样做的动机源于“系统机器人”的存在,它处理大量数据库事务。我已经在我们的项目中创建了一个完整的跟踪套件。如果用户更改任何

我在Ubuntu13.04上使用Django1.4和Python2.7。我正在处理的Django项目有一个使用Nose和Coverage的完整测试套件。在运行任何测试之前,我需要在数据库中创建一个用户。我在哪里做这个

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
上,然后在所有测试中继承它可能会很有用。

是的,这就是我所想的——继承一个基本的测试用例。我想知道是否有更好的地方做这件事。我可能会这么做。谢谢