我需要使用unittest测试此代码,以帮助我弄清楚如何测试它们
def post(self, request, pk):
form = ReviewForm(request.POST)
movie = Movie.objects.get(id=pk)
if form.is_valid():
form = form.save(commit=False)
if request.POST.get("parent", None):
form.parent_id = int(request.POST.get("parent"))
form.movie = movie
form.save()
return redirect(movie.get_absolute_url())
答案 0 :(得分:0)
Django的单元测试使用Python标准库模块: unittest 。该模块使用基于类的方法定义测试。
要使用它,请转到应用文件夹中的 test.py 。在那里,您可以开始编写测试:
您需要做的第一件事是导入TestCase和要测试的模型,例如:
从django.test导入TestCase 从myapp.models导入Post
第二,您需要编写测试。想一想,您需要测试什么?例如,如果是用于创建帖子的表单,则需要测试该帖子是否已创建并保存在数据库中。
为此,您需要设置一个初始状态以在安全的环境中运行测试。
让我们以帖子为例:
from django.test import TestCase
from myapp.models import Post
class CreateNewPostsTest(TestCase):
"""
This class contains tests that test if the posts are being correctly created
"""
def setUp(self):
"""Set up initial database to run before each test, it'll create a database, run a test and then delete it"""
# Create a new user to test
user1 = User.objects.create_user(
username="test_user_1", email="test1@example.com", password="falcon"
)
# Create a new post
post1 = NewPosts.objects.create(
user_post=user1,
post_time="2020-09-23T20:16:46.971223Z",
content='This is a test to check if a post is correctly created',
)
setUp
上定义的代码是否达到了预期的效果。因此,在我们的class CreateNewPostsTest
中,您需要定义一个新函数来运行测试:
def test_create_post_db(self):
"""Test if the new posts from different users where saved"""
self.assertEqual(NewPosts.objects.count(), 1)
此代码将运行assertEqual
,它将检查数据库中的对象数是否等于1(因为我们刚刚在setUp中创建了一个帖子)。
现在,您需要运行以下测试:
python manage.py测试
它将运行测试,并且您将在终端中看到测试是否失败。
就您而言,您可以对电影模型进行相同的操作。
您可以在Django文档中找到有关测试的更多信息:https://docs.djangoproject.com/en/3.1/topics/testing/overview/