如何解决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_yearofbirth
和 def 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 举报,一经查实,本站将立刻删除。