Django测试用例来测试模型失败

时间:2019-03-20 10:11:05

标签: python django

我正在为我的模型编写一个测试用例以测试__str__,但显然失败了。

这是我的 tests.py

from todoapp.models import User, Task
from django.test import TestCase


class UserModelTest(TestCase):
    def setUp(self):
        self.user = User.objects.create(
            first_name='john',
            last_name='doe',
            email='abc@example.com',
            password='johndoe')

    def test_string_representation(self):
        object_name = User.objects.get(id=50)
        expected_object_name = object_name.email
        self.assertEqual(expected_object_name, str(object_name))

这是我的 models.py

class User(AbstractUser):
    username = None
    email = models.EmailField(unique=True)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['first_name', 'last_name']

    def __str__(self):
        return self.email

PS : 具有id=50的用户已经存在

1 个答案:

答案 0 :(得分:3)

Django在您运行测试时会创建一个测试数据库,因此听起来像id=50 的用户不存在于测试数据库中。

您已经通过setUp方法创建了一个用户,所以我建议您在测试中获取该用户。

def test_string_representation(self):
    object_name = User.objects.get(email='abc@example.com')
    expected_object_name = object_name.email
    self.assertEqual(expected_object_name, str(object_name))

请注意,在测试期间获取对象时,通常不应依赖id。例如,如果测试以不同的顺序运行,则id可以随运行而变化。