これまで単体テストを書いたことはありません。このクラスの単体テストを作成しようとしています:
class User(models.Model):
facebook_id = models.CharField(max_length=200)
friends = ListField()
status = models.CharField(max_length=200)
status_time = models.DateTimeField('date published')
@staticmethod
def login(cls, userid, facebook_friends):
myuser = None
try:
myuser = User.objects.get(facebook_id=userid)
except User.DoesNotExist:
myuser = User()
myuser.status_time = datetime.datetime.now() - datetime.timedelta(minutes=16)
myuser.facebook_id = userid
myuser.save()
# user exists
myuser.friends = facebook_friends
myuser.save()
return {"data":myuser.get_friend_statuses()}
しかし、リスト フィールド クラスにあるため、facebook_friend の単体テストを記述する方法がわかりません。
class ListField(models.TextField):
__metaclass__ = models.SubfieldBase
description = "Stores a python list"
def __init__(self, *args, **kwargs):
super(ListField, self).__init__(*args, **kwargs)
def to_python(self, value):
if not value:
value = []
if isinstance(value, list):
return value
return ast.literal_eval(value)
def get_prep_value(self, value):
if value is None:
return value
return unicode(value)
def value_to_string(self, obj):
value = self._get_val_from_obj(obj)
return self.get_db_prep_value(value)
私はこのようなことを試しましたが、うまくいかず、書き方がわかりません:
class ListField(models.TextField):
def test_wrong_username(self):
user = User.login(self, 'username1', ['one', 'two', 'three'])
errcode = User.login(self, 'username2', ['one', 'two', 'three'])
self.assertEqual(errcode, user)
誰かが私を助けてくれたり、この単体テストの書き方を教えてくれたりできますか?