在Django中进行CRUD函数的单元测试

时间:2018-12-18 18:27:46

标签: django unit-testing testing automated-tests

我正在尝试为我的代码创建一个基本的单元测试。这是我正在运行的...

from django.test import TestCase
from django.contrib.auth.models import User
from feed.models import Post

class PostTests(TestCase):

 def setUp(self):
    user = User.objects.first()
    Post.objects.create(title='test', content='more testing', author=user)

 def test_content(self):
    post = Post.objects.get(id=1)
    expected_object_name = f'{post.content}'
    self.assertEquals(expected_object_name, 'more testing')

我得到的错误是“ django.db.utils.IntegrityError:(1048,“ Column'author_id'不能为空”))“我相信该错误正在寻找用户,但是当我在外壳中运行它时更新没有问题。

1 个答案:

答案 0 :(得分:3)

Django为测试创建了一个单独的数据库,该数据库最初是空的。因此,User.objects.first()返回None。然后,当您尝试创建信息时,将None传递为author

您需要在此处创建用户。

或者,您可以从SimpleTestCase而不是TestCase扩展,并使用类似factory boy的名称。它有一个DjangoModelFactory类,您可以使用它来创建伪Model对象,它们的作用与真实实例一样。