1

我是 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 的方法。代码在网站上按预期工作。我在测试中做错了吗?我不确定我应该如何在测试类中设置投票。

4

2 回答 2

2

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

于 2013-04-16T08:03:16.560 回答
1

问题是

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

仅实例化 Poll 对象,使用管理器实际保存对象,例如

poll = Poll.objects.create(question='poll', user=user)
于 2013-04-16T08:03:09.323 回答