Python Django事务测试用例通过sqlite上的数据迁移提高IntegrityError
我正在尝试使用LiveServerTestCase将现有的django 1.6项目和测试移植到django 1.7。我已将初始的_数据装置转换为数据迁移。当我这么做的时候,所有的实时服务器测试都失败了,因为数据正在刷新。然后我偶然发现TransactionTestCase的序列化_回滚选项,并将其添加到我的测试类中。但是,现在我在运行测试时遇到以下错误:Python Django事务测试用例通过sqlite上的数据迁移提高IntegrityError,python,django,sqlite,data-migration,Python,Django,Sqlite,Data Migration,我正在尝试使用LiveServerTestCase将现有的django 1.6项目和测试移植到django 1.7。我已将初始的_数据装置转换为数据迁移。当我这么做的时候,所有的实时服务器测试都失败了,因为数据正在刷新。然后我偶然发现TransactionTestCase的序列化_回滚选项,并将其添加到我的测试类中。但是,现在我在运行测试时遇到以下错误: sqlite3.IntegrityError: UNIQUE constraint failed: django_content_type.a
sqlite3.IntegrityError: UNIQUE constraint failed: django_content_type.app_label, django_content_type.model
我已在以下示例应用程序中复制了该问题:
模型:
class SomeData(Model):
value = IntegerField()
数据迁移:
def createData(apps, schema_editor):
SomeData = apps.get_model('mtestapp', 'SomeData')
db_alias = schema_editor.connection.alias
SomeData.objects.using(db_alias).bulk_create([
SomeData(value = 1),
])
class Migration(migrations.Migration):
dependencies = [
('mtestapp', '0001_initial'),
]
operations = [
RunPython(createData)
]
以及测试:
class TestIt(TransactionTestCase):
serialized_rollback = True
def test_one(self):
self.assertEqual(1, SomeData.objects.all().count())
def test_two(self):
self.assertEqual(1, SomeData.objects.all().count())
其中一项测试通过了。另一个提出了上述完整性错误。知道为什么会这样吗
编辑:我深入研究了一下,它看起来像django.contrib.contenttypes应用程序有一个post_migrate管理命令,在刷新测试数据库后运行。有没有办法阻止该命令运行?我在不同的情况下遇到了相同的问题。 我删除了serialized_rollback=True,并在setUp()方法中手动添加了测试数据。您需要这样做,Django的行为就好像只有此应用程序中的模型可用一样。在您的测试用例中,您有:
class TestIt(TransactionTestCase):
serialized_rollback = True
available_apps = ['mtestapp']
def test_one(self):
self.assertTrue(True)
def test_two(self):
self.assertTrue(True)
这在Django 1.9中是固定的: 对于早期版本,我通过重新创建静态数据来解决这个问题,作为每个测试的设置步骤