簡體   English   中英

測試調用類方法的python方法

[英]Testing python methods that call class methods

我有一個非常簡單的方法:

Class Team(models.Model):
    def sides(self):
      return SideNames.objects.filter(team=self)

SideNames是與Team在同一文件中定義的另一個模型,

當我嘗試測試時:

self.assertEquals(len(t.sides()), 2)

我收到以下錯誤:

 return SideNames.objects.filter(team=self) 

AttributeError:'NoneType'對象沒有屬性'objects'

但是如果我將測試更改為

self.assertEquals(len(SideNames.objects.filter(team=t)), 2)

然后我沒有得到錯誤。 從測試本身調用SideNames.objects.filter和調用實際方法之間有什么區別?

供參考,這里是全部2個類。

class Team(models.Model):
    """The model for a football team."""

    class Admin:
            pass

    def __unicode__(self):
            return u'%s' % self.name

    def is_player(self, player):
            """Checks to see if 'player' is a member if this team. Returns True if they are, or False otherwise."""

            try:
                    teamPlayer = TeamPlayers.objects.get(player=player, team=self)
                    return True
            except ObjectDoesNotExist:
                    return False

    def sides(self):
            """Return the side names for this team"""
            return SideNames.objects.filter(team=self)

    def updateSides(self, side_a, side_b):
            """Update the side names"""
            names = SideNames.objects.filter(team=self);

            a = SideNames.objects.get(name = names[0].name)
            a.name = side_a
            a.save()

            b = SideNames.objects.get(name = names[1].name)
            b.name = side_b
            b.save()

    name = models.CharField("Team Name", max_length=255)
    organiser = models.ForeignKey(User)

class SideNames(models.Model):
    """Holds the names of the sides for each team"""

    class Admin:
            pass

    def __unicode__(self):
            """Pretty print the SideNames object"""
            return self.name

    team = models.ForeignKey(Team)
    name = models.CharField(max_length=128)

在定義測試的模塊中,您將從其他模塊中導入名稱SideNames 在該模塊sides定義的方法,該名稱SideNames沒有定義或導入。

碰巧,您的測試是否執行以下操作:

from myapp import models

...

models.SideNames = None

因為這是我能想到的唯一解釋,為什么在該方法的上下文中SideNames應該為None。

t.sidenames_set.all() ,該方法本身是沒有意義的,因為Django自動提供了向后關系,因此您只需調用t.sidenames_set.all()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM