クラスメソッドを呼び出すテストのpython方法
-
20-09-2019 - |
質問
私は非常に簡単な方法があります:
Class Team(models.Model):
def sides(self):
return SideNames.objects.filter(team=self)
SideNamesチームと同じファイル内に定義された別のモデルである、
どちらが、私は試してみて、テストます:
self.assertEquals(len(t.sides()), 2)
私は次のエラーを取得する:
return SideNames.objects.filter(team=self)
はAttributeError: 'NoneType' オブジェクトが属性 'オブジェクト' を持っていません。
が、私がするテストを変更する場合は、
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)
解決
万が一、あなたのテストでは、このような何かをするのか
from myapp import models
...
models.SideNames = None
それは私がSideNamesは、そのメソッドのコンテキスト内でNoneにすべき理由について考えることができる唯一の説明だから。
はさておき、この方法自体はとして後方の関係を自動的にジャンゴによって提供され、無意味なので、あなただけのt.sidenames_set.all()
を呼び出すことができます。
他のヒント
テストを定義するモジュールでは、あなたは、いくつかの他のモジュールから名前SideNames
を読み込みます。そのsides
メソッドが定義されているモジュールでは、名前SideNames
が定義またはインポートされていない。
所属していません StackOverflow