IntegrityError:django 单元测试中出现重复的键值

ppo*_*ani 5 django postgresql unit-testing

我正在尝试为我的 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()
Run Code Online (Sandbox Code Playgroud)

测试失败并抛出以下错误:

IntegrityError: duplicate key value violates unique constraint "CarbonEmissions_userprofile_user_id_key" DETAIL:  Key (user_id)=(1) already exists.
Run Code Online (Sandbox Code Playgroud)

我不明白该代码有什么问题。

Mik*_*ll' 2

错误消息告诉您约束“CarbonEmissions_userprofile_user_id_key”失败,因为在某些表中,已经有一行 user_id 等于 1。

要解决此问题,最简单的方法可能是使用 pgAdminIII 查看约束和数据,它通常与 PostgreSQL 一起安装。展开表名称以查看列、约束等。展开约束以查看它们的名称和属性。右键单击表名称,然后选择“查看数据”以获取可浏览数据的选项。

  • 我意识到 user_id 有一个唯一值约束。但事实是我正在运行单元测试,因此在测试执行时会创建一个新的测试数据库。结果,桌子都是空的。 (2认同)