测试完成后,Django TestCase不会破坏测试数据

时间:2018-09-12 08:41:51

标签: python django django-tests

我目前正在尝试为应用程序编写我的第一个Django规范。但是,由于我在上次运行测试时创建的用户现在每次都运行在数据库中,因此每次运行测试时,都会收到IntegrityError: UNIQUE constraint failed: auth_user.username

我的印象是TestCase将测试代码封装在数据库事务中,以便在测试过程中创建的所有数据在完成时回滚?我在这里做什么错了?

from django.test import TestCase

from django.contrib.auth.models import User
from basic.models import SavedModels

# Create your tests here.
class SavedModelsTestCase(TestCase):
    User.objects.create(username="user_001",
                        password="useruser",
                        first_name="Test",
                        last_name="User",
                        email="test_user@test.com"
                        )

    user = User.objects.filter(username="user_001")
    saved_model = SavedModels.objects.create(name="Test Model",
                                             description="A model",
                                             user=user
                                            )

    def test_saved_models(self):
        saved_model = create_saved_model()
        self.assertTrue(isinstance(saved_model, SavedModels))
        self.assertEqual(saved_model.name, "Test Model")
        self.assertEqual(saved_model.description, "A model")
        self.assertEqual(saved_model.user, user)

1 个答案:

答案 0 :(得分:2)

它不是那样工作的,您需要两个名为setup的函数来设置所需的数据(它在测试的开始运行),您需要在此处创建用户,然后将tearDown(在测试的最后运行)在将这两个代码相加后运行该测试后,请执行清理操作

class SavedModelsTestCase(TestCase):

   def setUp(self):
       #create your user here
    def tearDown(self):
       # for any clenaup required none in your case

    def test_saved_models(self):
        saved_model = create_saved_model()
        self.assertTrue(isinstance(saved_model, SavedModels))
        self.assertEqual(saved_model.name, "Test Model")
        self.assertEqual(saved_model.description, "A model")
        self.assertEqual(saved_model.user, user)