在第一次测试成功后,Django的后续测试失败

时间:2015-01-12 14:17:14

标签: python django unit-testing tdd

使用以下代码时,只会传递第二个测试用例(因为它首先被执行),其余的将失败。

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很新,所以对此有任何帮助都非常感谢。

2 个答案:

答案 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")
相关问题