2013-04-16 210 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')等爲您保存。