Django使用unittest模块进行单元测试过程解析
作者:再见紫罗兰 发布时间:2021-04-03 13:09:08
Django测试框架非常简单,首选方法是使用python标准库中的unittest模块。
Writing tests
Django的单元测试使用python的unittest模块,这个模块使用基于类的方法来定义测试。类名为django.test.TestCase,继承于python的unittest.TestCase。
from django.test import TestCase
from myapp.models import Animal
class AnimalTestCase(TestCase):
def setUp(self):
Animal.objects.create(name="lion", sound="roar")
Animal.objects.create(name="cat", sound="meow")
def test_animals_can_speak(self):
"""Animals that can speak are correctly identified"""
lion = Animal.objects.get(name="lion")
cat = Animal.objects.get(name="cat")
self.assertEqual(lion.speak(), 'The lion says "roar"')
self.assertEqual(cat.speak(), 'The cat says "meow"')
运行测试的时候,测试程序会在所有以test开头的文件中查找所有的test cases(inittest.TestCase的子类),自动建立测试集然后运行测试。
注意:如果测试是基于数据库访问的(读取、查询Model),一定要用django.test.TestCase建立测试类,而不要用unittest.TestCase。
Runing tests
执行目录下所有的测试(所有的test*.py文件):
$ python manage.py test
执行animals项目下tests包里的测试:
$ python manage.py test animals.tests
执行animals项目里的test测试:
$ python manage.py test animals
单独执行某个test case:
$ python manage.py test animals.tests.AnimalTestCase
单独执行某个测试方法:
$ python manage.py test animals.tests.AnimalTestCase.test_animals_can_speak
为测试文件提供路径:
$ python manage.py test animals/
通配测试文件名:
$ python manage.py test --pattern="tests_*.py"
启用warnings提醒:
$ python -Wall manage.py test
数据库
测试是需要数据库的,django会为测试单独生成数据库。不管你的测试是否通过,当你所有的测试都执行过后,这个测试数据库就会被销毁。
默认情况下,测试数据库的名字是test_DATABASE_NAME,DATABASE_NAME是你在settings.py里配置的数据库名.如果 你需要给测试数据库一个其他的名字,在settings.py中指定TEST_DATABASE_NAME的值。使用sqlite3时,数据库是在内存中创建的。
除了数据库是单独创建的以外,测试工具会使用相同的数据库配置--DATABASE_ENGINE, DATABASE_USER, DATABASE_HOST等等.创建测试数据库的用户DATABASE_USER(settings中)指定,所以你需要确认 DATABASE_USER有足够的权限去创建数据库。
测试执行顺序
为了保证所有的测试都从干净的数据库开始,执行顺序如下:
1.所有的TestCase子类首先运行。
2.所有其他的单元测试(unittest.TestCase,SimpleTestCase,TransactionTestCase)。
3.其它的测试(例如doctests等)
加速测试
可以将PASSWORD_HASHERS设置为更快的算法:
PASSWORD_HASHERS = (
'django.contrib.auth.hashers.MD5PasswordHasher',
)
来源:https://www.cnblogs.com/linxiyue/p/3885949.html


猜你喜欢
- 以下是引用片段: ImportsSystem.Data ImportsSystem.Data.SqlClient PublicClassFo
- 我们都知道如果想让电脑运行更多的程序,就要增加它的配置才能带动。在之前的学习中,我们已经对函数的打印print有所了解,但是遇到更加复杂的对
- 开发背景:每次项目都要写数据库、烦死了。。然后就每次数据库都要花很多时间。烦死了!不如写个通用的增删查改,以不变应万变!特性:搭建通用增删查
- 重装电脑,在windows和虚拟机里面的Ubuntu里都安装了Pycharm专业版,安装的时候我都选择了vim插件,装好之后打开发现ctrl
- 前言日常工作中,在不刷新页面的情况下发送消息并获得即时响应是我们认为理所当然的事情。但在过去,启用实时功能对开发人员来说是一个真正的挑战。开
- 0.引言利用python开发,借助Dlib库进行人脸识别,然后将检测到的人脸剪切下来,依次排序显示在新的图像上;实现的效果如下图所示,将图1
- 字符串查找基本操作主要分为三个关键词:find()、index()、count()。这三个用法相同,格式都是为:自定义字符串名.关键词(‘子
- 一):视图的定义视图是由基于一个或多个表的一个查询所定义的虚拟表,它将查询的具体定义保存起来,视图不包含任何数据。视图在操作上和数据表没有什
- Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this),用于传递对象本身,而在调用的时候则不必显式传
- 这篇文章主要介绍了python匿名函数lambda原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 举几个例子来介绍一下,Python 的 CSV模块的使用方法,包括,reader, writer, DictReader, DictWrit
- 在js中直接添加html语句,js会将html字符串解析成相应的HTML语句,并在前端进行显示。 <span style="
- 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写,刚开始不会体会出SQL语句各种写法的性能优劣,但是如果将应
- SQLserver 2014 AlwaysOn增强了原有的数据库镜像功能,使得先前的单一数据库故障转移变成以组(多个数据)为单位的故障转移。
- 一、Go的内建类型errorerror类型其实是一个接口类型,也是GO语言的内建类型;在这个接口类型的声明中只包含了一个方法Error;Er
- 很多朋友在留言区询问关于python上传文件和字符到服务器的问题,现编针对这个给大家整理了一个解决办法。上传简单的字符串def send_s
- 在pycharm中我们有时需要切换python的版本,这里需要注意的是我们是在PyCharm中的Preferences中切换的,在File的
- 本文实例讲述了MySQL查询条件常见用法。分享给大家供大家参考,具体如下:条件使用where子句对表中的数据筛选,结果为true的行会出现在
- 时区的概念与转换首先要知道时区之间的转换关系,其实这很简单:把当地时间减去当地时区,剩下的就是格林威治时间了。 例如北京时间的18:00就是
- 简而言之就是,nn.Sequential类似于Keras中的贯序模型,它是Module的子类,在构建数个网络层之后会自动调用forward(