Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django如何使用验证器测试模型函数_Python_Django_Testing_Django Models_Django Testing - Fatal编程技术网

Python Django如何使用验证器测试模型函数

Python Django如何使用验证器测试模型函数,python,django,testing,django-models,django-testing,Python,Django,Testing,Django Models,Django Testing,我的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.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
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')
另外,您可以忽略一个事实,即
返回年龄
并不总是返回“真实”年龄-这对我的班级并不重要。

我会这样做:

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
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')
来自django.test的
导入测试用例
从myapp.models导入个人
类TestPersonalModel(TestCase):
def设置(自):
Personal.objects.create(lastname='Schuhmacher',firstname='Michael',yearofbirth=1969)
def测试_全名(自身):
person=Personal.objects.get(lastname=“Schuhmacher”)
self.assertEqual(person.fullname,'Schuhmacher,Michael')
def测试年龄(自我):
person=Personal.objects.get(lastname=“Schuhmacher”)
自我评估资格(个人年龄,52岁)
def测试出生年份验证器(自我):
使用self.assertRaises(ValidationError):
Personal.objects.create(lastname='Einstein',firstname='Albert',yearofbirth=1879)

如果
出生年份<1900,我们预计会出现验证错误。由于某些原因,不会引发此错误,因此单元测试失败。