使用以下代码时,只会传递第二个测试用例(因为它首先被执行),其余的将失败。
models.py
from django.db import models
class Application(models.Model):
title = models.CharField(max_length=50)
description = models.CharField(max_length=160)
url = models.URLField(max_length=255)
test.py
from django.test import TestCase
from application.models import Application
class ApplicationTests(TestCase):
def setUp(self):
testApplication = Application(
title="Application Title",
description="Application Description",
url="http://www.application-url.com"
)
testApplication.save()
def test_application_has_title(self):
application = Application.objects.get(pk=1)
self.assertEqual(application.title, "Application Title")
def test_application_has_description(self):
application = Application.objects.get(pk=1)
self.assertEqual(application.description, "Application Description")
def test_application_has_url(self):
application = Application.objects.get(pk=1)
self.assertEqual(application.url, "http://www.application-url.com")
对我来说,似乎在第一次测试后该对象已从DB中删除,但这不应该发生。我对Django很新,所以对此有任何帮助都非常感谢。
答案 0 :(得分:0)
实际上,通过设计,每个测试都设计为独立运行,因此每次测试后数据库都会重新初始化;我不知道是否存在某些DB每次使用不同PK的问题,但在任何一种情况下,我建议使用.all()[0]交换.get(pk = 1)
答案 1 :(得分:0)
可能testApplication
没有pk为1,您可以尝试以下方法:
class ApplicationTests(TestCase):
def setUp(self):
self.testApplication = Application.objects.create(
title="Application Title",
description="Application Description",
url="http://www.application-url.com"
)
def test_application_has_url(self):
application = Application.objects.get(pk=self.testApplication.id)
self.assertEqual(application.url, "http://www.application-url.com")