2013-04-16 171 views
0

我是新来django测试,并有一些问题,使用它们来测试模型之间的关系。Django模型关系测试

这里是我的模型的摘录:

class Member(models.Model): 
    user = models.OneToOneField('auth.User') 
    points = models.IntegerField() 

    def __unicode__(self): 
     return self.points 

    def get_number_of_poll(self): 
     nbr_of_poll = Poll.objects.filter(user=self.user).count() 
     return nbr_of_poll 

class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    user = models.ForeignKey(User) 

    def __unicode__(self): 
     return self.question 

这里是测试:

from polls.models import Member, Poll 
from django.contrib.auth.models import User 
from django.test import TestCase 

class MemberTestCase(TestCase): 
    def setUp(self): 
     user = User(username='user') 
     self.member = Member(user=user, points=5000) 
     poll = Poll(question='poll', user=user) 

    def test_get_number_of_poll(self): 
     self.assertEqual(self.member.get_number_of_poll(), 1) 

的问题是与test_get_number_of_poll()方法总是返回0代码工作的预期网站。 我在测试中做错了什么?我不知道我应该如何在测试课程中设定投票。

回答

1

的问题是,

poll = Poll(question='poll', user=user) 

只有实例的投票对象,请使用管理员实际保存对象,例如

poll = Poll.objects.create(question='poll', user=user) 
+0

这很有道理。一旦测试完成,我是否应该使用'tearDown()'方法来移除它们,或者它会自动完成? – romainberger

1

您不保存您在setUp方法中创建的任何项目。实例化一个模型对象并不会将它保存到数据库中:您应该对它们调用save(),或者只使用User.objects.create(username='user')等为您保存。