微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django 如何使用验证器测试模型功能

如何解决Django 如何使用验证器测试模型功能

我的 models.py 看起来像这样:

def validate_yearofbirth(value):
    text = str(value)
    if len(text) < 4 or len(text) > 4 or value < 1900:
        raise ValidationError('Please insert your year of birth!')

class Personal(models.Model):
    firstname = models.CharField(max_length = 100)
    lastname = models.CharField(max_length = 100)
    yearofbirth = models.PositiveIntegerField(validators = [validate_yearofbirth],null = True)

    @property
    def fullname(self):
        return '{},{}'.format(self.lastname,self.firstname)
    
    def __str__(self):
        return self.fullname

    @property
    def age(self):
        year = datetime.Now().year
        age = year - self.yearofbirth
        return age

有人知道如何为 def validate_yearofbirthdef age 编写测试吗?我只设法为 def fullname 编写了测试,但我还没有想出如何为不是 def __str__(self)函数编写测试。

这个类的 test_models.py 文件如下所示:

class TestModel(TestCase):

    def test_personal_str(self):
        fullname = Personal.objects.create(nachname = 'Last Name',vorname = 'First Name')

        self.assertEqual(str(fullname),'Last Name,First Name')

您也可以忽略 return age 并不总是返回“真实”年龄这一事实 - 这对我的班级来说并不重要。

解决方法

我会这样做:

from django.test import TestCase
from myapp.models import Personal

class TestPersonalModel(TestCase):

    def setUp(self):
        Personal.objects.create(lastname = 'Schuhmacher',firstname = 'Michael',yearofbirth=1969)

    def test_fullname(self):
        person = Personal.objects.get(lastname="Schuhmacher")
        self.assertEqual(person.fullname,'Schuhmacher,Michael')
    
    def test_age(self):
        person = Personal.objects.get(lastname="Schuhmacher")
        self.assertEqual(person.age,52)

    def test_year_of_birth_validator(self):
        with self.assertRaises(ValidationError):
            Personal.objects.create(lastname = 'Einstein',firstname = 'Albert',yearofbirth=1879)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。