内容提要:
使用djagno-test-plus编写djagno单元测试用例。
《Django高级实战-开发企业及问答网站》作者Jack
——学习来源
编写单元测试用例
使用djagno-test-plus第三方库,它是基于TestCase基础上增强了一些特性。
在django应用下有test.py文件,该文件专门用于编写测试用例。(也可以新建tests文件,根据测试的模块不同建对应的test_models.py文件)
单元测试用例需要对应用的每个函数进行断言。
test.py文件中,测试用例需要以test_开头。
asserEqual():判断2个参数值是否相同,相同则返回True。
model测试用例示例:
# model文件
from django.db import models
from mptt.models import MPTTModel,TreeForeignKey
class Comments(MPTTModel):
name = models.CharField(max_length=50,verbose_name="留言名称")
content = models.TextField(verbose_name="留言")
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
def __str__(self):
return self.name# model的测试用例
from .models import Comments
from test_plus.test import TestCase
# model测试用例
class TestComment(TestCase):
def setUp(self):
self.c = Comments.objects.create(name='test')
def test_str__(self):
self.assertEqual(self.c.__str__(), 'test')urls测试用例示例:
# urls.py文件
from django.contrib import admin
from django.urls import path
from Comments.views import test_mptt
urlpatterns = [
path('admin/', admin.site.urls),
path('genres/', test_mptt.as_view(),name='gen'),
]# urls测试用例
from django.urls import reverse,resolve
from test_plus.test import TestCase
class TestCommentUrls(TestCase):
def setUp(self):
pass
# 命名路由解析为string网址
def test_detail_reverse(self):
self.assertEqual(reverse('gen'),'/genres/')
# string网址解析到命名路由
def test_detail_resolve(self):
self.assertEqual(resolve('/genres/').view_name,'gen')views测试用例示例(该测试用例使用了公共的测试基类BaseCommentCase,其他测试用例也可以使用类似方式):
from django.shortcuts import render
from Comments.models import Comments
from django.views.generic.base import View
class test_mptt(View):
def get(self,request,*args,**kwargs):
return render(request, 'genre.html', {'genres': Comments.objects.all()})
def get_xx(self):
return 'xx'from django.test import RequestFactory
from .views import test_mptt
from test_plus.test import TestCase
class BaseCommentCase(TestCase):
def setUp(self):
self.factory = RequestFactory()
class CommentView(BaseCommentCase):
def setUp(self):
super().setUp()
# 下面三行表示直接给view发送一个get请求
self.view = test_mptt()
request = self.factory.get('/exam')
self.view.request = request
def test_get_xx(self):
self.assertEqual(self.view.get_xx(),'xx')python manage.py test即可执行本项目所有测试用例。
测试用例全部通过的页面截图: