测试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应无该方法的上下文中的唯一解释。
顺便说一句,该方法本身是没有意义的,因为向后关系自动Django提供,所以你可以只调用t.sidenames_set.all()
。
其他提示
在定义该测试模块,要导入从某些其他模块的名称SideNames
。在该sides
方法被定义的模块,该名称SideNames
没有定义或导入。
不隶属于 StackOverflow