我试图运行下面的单元测试我的Django项目:IntegrityError:在Django单元测试重复键值
from django.test import TestCase
from django.contrib.auth.models import User
from CarbonEmissions import models
class DbTest(TestCase):
#is called before each test case (e.g test_insertingUserProfiles)
def setUp(self):
self.user = User.objects.create(username='ppoliani')
self.userProfile = models.UserProfile.objects.create(user=self.user, title='Mr', type='student', occupation='student')
def test_insertingUserProfiles(self):
"""
Testing the insertion of user profiles into our datbase
"""
self.assertEqual(self.user.get_profile().title,'Mr')
#is called after each test case (e.g test_insertingUserProfiles)
def tearDown(self):
self.user.delete()
self.userProfile.delete()
测试失败抛出以下错误:
IntegrityError: duplicate key value violates unique constraint "CarbonEmissions_userprofile_user_id_key" DETAIL: Key (user_id)=(1) already exists.
我可以不明白该代码有什么问题。
我意识到user_id具有唯一的值约束。但事实是,我正在运行单元测试,因此在测试执行时会创建一个新的测试数据库。结果表格全部是空的。 – ppoliani 2012-08-11 16:15:12
@ user512783:赔率有利于您的误解。看看桌子。如果您无法确定代码的哪一行会引发错误,请修剪您的DBTest类,直至将其隔离。 – 2012-08-11 20:52:52
@Catcall [来自文档](https://docs.djangoproject.com/en/1.4/topics/testing/#the-test-database),“为测试创建单独的空白数据库...测试数据库在所有测试执行完毕后被销毁“。如果你说预先存在的数据(测试运行之前)是问题,那么不,它不是。如果你说OP可能会终止测试来检查测试数据库,那当然会起作用,但是除了'IntegrityError'之外还会有什么信息? – supervacuo 2012-08-11 23:11:47