我对任何类型的编码测试都是新手。这是对我问题的回答的后续。答案确定了这种类型的模型方法不应该将对象保存到数据库:
@classmethod
def create(cls, user, name):
list = cls(user=user, name=name)
return list
如果是这样的话,我很好奇为什么这个测试通过了,并说一切都好?
from django.test import TestCase
from .models import List
from django.contrib.auth.models import User
class ListTestCase(TestCase):
def setUp(self):
user_1 = User(username="test_user", password="abcd")
user_1.save()
List.objects.create(user=user_1, name="mylist")
List.objects.create(user=user_1, name="anotherlist")
def test_lists_is_created(self):
user_1 = User.objects.get(username="test_user")
list_1 = List.objects.get(user=user_1, name="mylist")
self.assertEqual("mylist", list_1.name)
测试通过的原因是您调用了与已实现的方法不同的方法。
ListTestCase.setUp()
中的线路
List.objects.create(user=user_1, name="mylist")
实际上,调用Django的QuerySet.create()
方法。请注意,它是通过List.objects.create()
调用的,而不是通过List.create()
调用的。因此,对象被保存在数据库中,并且测试通过。
在您的案例中,您已经在List
模型中实现了一个方法create()
,因此您应该调用List.create()
。