这是我要运行的测试的最小示例
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。