所以我有一个测试类,它有一个设置方法来创建一个可以测试的模型对象:
class UserProjectTests(TestCase):
fixtures = ['admin_test.json']
def setUp(self):
...
self.project1 = Project.objects.create(
user=self.user_profile1,
product=self.product1,
module=self.module1,
model=self.model1,
zipcode=90210
)
self.project1.save()
def test_module_created(self):
...
def test_model_created(self):
...
def test_product_created(self):
...
def test_project_created(self):
#! what happened to pk<4???
result1 = Project.objects.get(pk=4)
self.assertEquals(result1.zipcode, 90210)
def test_user_cannot_edit_project_they_dont_own(self):
...
我的问题是 - 为什么我必须调用pk=4
来获取测试数据库中的唯一对象?如果我将这个测试向上移动几个函数pk我必须查询以通过测试减少。似乎每次安装运行它都不会以原始数据库开始,因为pk是自动递增的。
谁能告诉我为什么会这样?无论出现哪种测试功能,我该怎么做才能使用pk = 1?
答案 0 :(得分:1)
Django的测试运行器在每次测试后刷新数据库,它不会删除它并重新创建它 - 这会大大减慢测试速度。
您可以直接询问第一个元素:Project.objects.all()[0]
,而不是对pk编号进行硬编码。由于您使用空表开始每次测试运行,因此可以保证为您提供所需的项目。
答案 1 :(得分:0)
如果真的希望这将是数据库中唯一的对象,您可以检索它:
result1 = Project.objects.get()
如果找到多个(或没有)对象,则会引发错误。它可能更安全:
result1 = Project.objects.all()[-1]
那将检索最后一个对象。