运行./manage test --keepdb后测试数据库不为空

时间:2019-05-15 03:43:51

标签: django django-testing

这是我要运行的测试的最小示例

from django.contrib.auth import get_user_model
from django.test import TestCase

User = get_user_model()

class UserTests(TestCase):
    # def tearDown(self):
    #     User.objects.all().delete()

    def test_user(self):
        User.objects.create(username='testuser')

第一次运行正常。但是第二次产生

...lib/python3.7/site-packages/MySQLdb/connections.py", line 224, in query
    _mysql.connection.query(self, query)
django.db.utils.IntegrityError: (1062, "Duplicate entry 'testuser' for key 'username'")

上一次运行的条目仍在数据库中,因此重复条目错误。我认为使用django.test.TestCase(而不是unittest.TestCase)会在每次运行时清除测试数据库吗?如果我取消对tearDown函数的注释,该问题就会消失。最后,将所有模型都包含在tearDown中并不是什么大的工作,但是我仍然想知道为什么这样做是必要的。

这是我的数据库设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'materials',
        'USER': config('DB_USER', default=''),
        'PASSWORD': config('DB_PASSWORD', default=''),
        'HOST': 'localhost',
        'PORT': '',
    }
}

存储引擎是Aria。

0 个答案:

没有答案