如何有效地测试此Django模型? [英] how do I efficiently test this Django model?
本文介绍了如何有效地测试此Django模型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在为网站构建身份验证系统,我没有Django的测试经验。我已经写了一些基本测试。
I'm building an authentication system for a website, I don't have prior test experience with Django. I have written some basic tests.
模型,
class User(AbstractBaseUser, PermissionsMixin):
username = models.CharField(max_length=25, unique=True, error_messages={
'unique': 'The username is taken'
})
first_name = models.CharField(max_length=60, blank=True, null=True)
last_name = models.CharField(max_length=60, blank=True, null=True)
email = models.EmailField(unique=True, db_index=True, error_messages={
'unique': 'This email id is already registered!'
})
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
date_joined = models.DateTimeField(auto_now_add=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username',]
objects = UserManager()
def get_full_name(self):
return ' '.join([self.first_name, self.last_name])
def get_short_name(self):
return self.email
def __unicode__(self):
return self.username
和模型经理,
class UserManager(BaseUserManager):
def create_user(self, email, password=None, **kwargs):
if not email:
raise ValueError('Enter Email address')
if not kwargs.get('username'):
raise ValueError('Enter Username')
account = self.model(
email=self.normalize_email(email), username=kwargs.get('username')
)
account.set_password(password)
account.save()
return account
def create_superuser(self, email, password, **kwargs):
account = self.create_user(email, password, **kwargs)
account.is_superuser = True
account.save()
return account
和我的测试,
class SettingsTest(TestCase):
def test_account_is_configured(self):
self.assertTrue('accounts' in INSTALLED_APPS)
self.assertTrue('accounts.User' == AUTH_USER_MODEL)
class UserTest(TestCase):
def setUp(self):
self.username = "testuser"
self.email = "testuser@testbase.com"
self.first_name = "Test"
self.last_name = "User"
self.password = "z"
self.test_user = User.objects.create_user(
username=self.username,
email=self.email,
first_name=self.first_name,
last_name=self.last_name
)
def tearDown(self):
del self.username
del self.email
del self.first_name
del self.last_name
del self.password
def test_create_user(self):
self.assertIsInstance(self.test_user, User)
def test_default_user_is_active(self):
self.assertTrue(self.test_user.is_active)
def test_default_user_is_staff(self):
self.assertFalse(self.test_user.is_staff)
def test_default_user_is_superuser(self):
self.assertFalse(self.test_user.is_superuser)
def test_get_full_name(self):
self.assertEqual('Test User', self.test_user.get_full_name())
def test_get_short_name(self):
self.assertEqual(self.email, self.test_user.get_short_name())
def test_unicode(self):
self.assertEqual(self.username, self.test_user.__unicode__())
很幸运,所有的通行证都是,
这些测试是否超标,超标或正常?在模型中应该测试什么?是否缺少任何程序?这个测试有什么问题吗?
fortunately all the passes, and my question is, are these tests overdone or underdone or normal? What should be tested in a model? is there any procedure missing? anything wrong with this tests?? how do I effectively write tests??
感谢您的见解。
推荐答案
足够安静。一些注意事项:
That's quiet enough. A couple of notes:
- 无需删除
tearDown
- 您忘了在
raise ValueError
行中使用测试
。UserManager
assertRaises - 您还可以测试由
create_user
(来自UserManager)创建的用户可以使用给定的密码和电子邮件对
(来自django.contrib.auth)进行身份验证。 - 使用
coverage
package来检测错过了测试的行/类/包/语句。
- No need to delete properties in
tearDown
- You forgot to tests
UserManager
in linesraise ValueError
usingassertRaises
. - You may also test that user created by
create_user
(from UserManager) canauthenticate
(from django.contrib.auth) by given password and email. - Use
coverage
package to detect which lines/classes/packages/statements was missed to test.
希望它会有所帮助!
这篇关于如何有效地测试此Django模型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文