Django之单元测试

简介:

一、什么是单元测试

    单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。如果测试通过则说明我们这个函数或功能能够正常工作,如果失败要么测试用例不正确,要么函数有bug需要修复。


二、如何使用单元测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from  django.test  import  TestCase
from  app01.models  import  *
 
class  AuthorTestCase(TestCase):
 
     # 测试开始前的工作
     def  setUp( self ):
         auths  =  Author.objects. all ().values()
         print (auths)
 
     # 测试结束的收尾工作
     def  tearDown( self ):
         Author.objects. filter (name = "Steven" ).delete()
         auths  =  Author.objects. all ().values()
         print (auths)
 
     # 自己定义的测试方法,必须以"test_"开头
     def  test_insert_data( self ):
         Author.objects.create(name = "Steven" , hobby = "骑行" )
         auths  =  Author.objects. all ().values()
         print (auths)
         
 
输出:
<QuerySet []>
<QuerySet [{ 'name' 'Steven' 'id' 1 'hobby' '骑行' }]>
<QuerySet []>

    Django的单元测试实际是基于Python的unittest模块,“setUp”方法是测试开始前的工作,“tearDown”方法是测试结束的收尾动作,这些方法名都是固定的,不允许随意修改,里面内容你也可以不写直接“pass”。“test_insert_data”是我自己定义的测试内容,方法名必须以“test_”开头,可以任意写多个自定义测试方法。


Django单元测试注意点:

    1. 对于每一个测试方法都会讲setUp()和tearDown()方法执行一遍

    2. Django会在数据库中自动新建一个测试数据库来进行数据库方面的测试,默认在测试完成后销毁。所以不用担心它会影响你实际的生成数据库!


三、运行单元测试

1. 测试项目中所有的应用

1
python3 manage.py test

2. 测试项目中单独的应用

1
python3 manage.py test app01

3. 运行项目中某个应用的测试文件中的一个Case

1
python3 manage.py test app01.test2.AuthorTestCase

4. 运行项目中某个应用的测试文件中的一个Case中的其中一个测试方法

1
python3 manage.py test app01.test2.AuthorTestCase.test_insert_data

5. 运行单元测试结束时不自动删除测试数据库(保留测试数据库)

1
python3 manage.py test app01  - - keepdb

# 为什么要有这个呢?如果你有很多测试用例,定义了许多测试方法,那么每次在做数据库操作时都会创建数据库、删除数据库,严重影响执行效率。这样我们就保留测试数据库,记得下次执行测试时也要带上--keepdb,不然会提示你删除上一次的测试数据库


四、指定测试数据库的字符集

    这是我之前踩过的一个坑,之前用Pycharm写过的一个项目执行测试没有任何问题,过几天重新打开执行单元测试,结果报了字符集错误,然后测试数据库没有自动删除。我经过仔细排查,发现自动创建的测试数据库字符集竟然是“latin1”,我数据库表中有中文,所以直接报错了。知道错误原因就好办了,我查询了官方文档,在setting.py文件中强制设置测试数据库字符集是“UTF8”。

1
2
3
4
5
6
7
8
9
10
11
DATABASES  =  {
     'default' : {
         'ENGINE' 'django.db.backends.mysql' ,
         'NAME' 'xxx' ,
         'USER' 'xxx' ,
         'PASSWORD' 'xxx' ,
         'HOST' : '',
         'PORT' : '',
         'TEST' : { 'CHARSET' 'utf8' , },
     }
}

本文转自戴柏阳的博客博客51CTO博客,原文链接http://blog.51cto.com/daibaiyang119/1983898如需转载请自行联系原作者

daibaiyang119
相关文章
|
测试技术 程序员 API
编写 Django 应用单元测试
文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 我们博客功能越来越来完善了,但这也带来了一个问题,我们不敢轻易地修改已有功能的代码了! 我们怎么知道代码修改后带来了预期的效果?万一改错了,不仅新功能没有用,原来已有的功能都可能被破坏。此前我们开发一个新的功能,都是手工运行开发服务器去验证,不仅费时,而且极有可能验证不充分。 如何不用每次开发了新的功能或者修改了已有代码都得去人工验证呢?解决方案就是编写自动化测试,将人工验证的逻辑编写成脚本,每次新增或修改代码后运行一遍测试脚本,脚本自动帮我们完成全部测试工作。 接下来我们将进行两种类型的测试,一种是单元测试,
116 0
|
关系型数据库 测试技术 数据库
|
16天前
|
Java 测试技术
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
21 0
|
Java 测试技术
Java 中的单元测试和集成测试策略
【4月更文挑战第19天】本文探讨了Java开发中的单元测试和集成测试。单元测试专注于单一类或方法的功能验证,使用测试框架如JUnit,强调独立性、高覆盖率和及时更新测试用例。集成测试则验证模块间交互,通过逐步集成或模拟对象来检测系统整体功能。两者相辅相成,确保软件质量和降低修复成本。
|
12天前
|
缓存 自动驾驶 测试技术
如何进行有效的Apollo测试:单元测试和集成测试指南
如何进行有效的Apollo测试:单元测试和集成测试指南
41 13
|
1月前
|
Java 测试技术
单元测试编写可测试代码
单元测试编写可测试代码
19 2
|
2月前
|
测试技术 Python
Python中的单元测试与测试驱动开发(TDD)实践
Python中的单元测试与测试驱动开发(TDD)实践
|
2月前
|
缓存 测试技术 持续交付
工程化测试:Apollo的单元测试与集成测试指南
工程化测试:Apollo的单元测试与集成测试指南
|
3月前
|
测试技术 持续交付
探索单元测试和 E2E 测试:提升软件质量的关键步骤(下)
探索单元测试和 E2E 测试:提升软件质量的关键步骤(下)
探索单元测试和 E2E 测试:提升软件质量的关键步骤(下)