Python项目中的单元测试
引入
单元测试负责对最小的软件设计单元(模块)进行验证,unittest是Python自带的单元测试框架。 单元测试与功能测试都是日常开发中必不可少的部分,本文演示了Python中unittest单元测试框架的基本使用。
一个简单的测试例子
定义一个类,简单的实现add、sub两个方法,并对其进行单元测试。
待测试的m1.py文件内容如下:
class MyClass(object):
"""just a test case"""
def __init__(self, x, y):
self.x = int(x)
self.y = int(y) def add(self):
return self.x + self.y def sub(self):
return self.x - self.y
在与m1.py同级的目录下创建test.py测试文件,使用unittest单元测试框架对A类的方法进行测试。代码内容如下:
import unittest
from m1 import MyClass class MyClassTest(unittest.TestCase):
def setUp(self):
self.calc = MyClass(7, 5) def tearDown(self):
pass def test_add(self):
ret = self.calc.add()
self.assertEqual(ret, 12) def test_sub(self):
ret = self.calc.sub()
self.assertEqual(ret, 2) if __name__ == '__main__':
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(MyClassTest('test_add'))
suite.addTest(MyClassTest('test_sub'))
# 执行测试
runner = unittest.TextTestRunner()
runner.run(suite)
运行测试:
demo1 $ python3 test.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s OK
到此一个简单的单元测试就完成了。
unittest框架知识点
unittest框架中4个重要的概念:
test fixture:是初始化和清理测试数据及环境,通过重写TestCase的setUp()和tearDown()方法来实现test case:是测试用例test suite:是测试用例的集合(俗称测试套件),通过addTest加载TestCase到TestSuite中,返回一个TestSuite实例。test runner:的作用是运行测试用例并返回结果,通过TextTestRunner类提供的run()方法来执行test suite或test case。
Django中的单元测试
Django项目的app目录下都默认生成了一个
Model部分单元测试用例
假设项目中有一个Book的model:
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=10, decimal_places=2)
测试用例代码:
# app01/tests.py
from django.test import TestCase
from app01.models import Book
# Create your tests here. class BookModelTest(TestCase):
def setUp(self):
Book.objects.create(title='书名', price=11.11) def test_book_model(self):
from decimal import Decimal
result = Book.objects.get(title='书名')
self.assertEqual(result.price, Decimal('11.11'))
运行测试,在项目目录下运行:
$ python3 manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.003s OK
Destroying test database for alias 'default'...
测试用例OK…
视图部分单元测试用例
假设我们有个index视图,代码如下:
def index(request):
return render(request, 'index.html')
在app01/tests.py文件中添加测试用例代码:
# app01/tests.py
class IndexPageTest(TestCase):
"""测试index页面"""
def test_index_page_renders_index_template(self):
"""测试index视图"""
response = self.client.get('/index/')
self.assertEqual(response.status_code, 200) # 判断状态码
self.assertTemplateUsed(response, 'index.html') # 判断渲染的模板是否正确
在项目根目录运行python manage.py test命令:
$ python3 manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 0.027s OK
Destroying test database for alias 'default'...
python manage.py test命令会查找当前项目中的tests.py文件,并运行测试用例。
Python项目中的单元测试的更多相关文章
- python项目中requirements的巧用(一键导入所有安装包)
一个Python 项目中可能安装很多安装包, 再次创建虚拟环境是需要重新安装的话很麻烦也费时间, 或者项目部署的时候避免重装, 可以将现有项目的所有安装包记录在requirements.txt 文件, ...
- Python项目中如何优雅的import
Python项目中如何优雅的import 前言 之前有一篇关于Python编码规范的随笔, 但是写的比较杂乱, 因为提到了import语句, 在篇文章中, 我专门来讲Python项目中如何更好的imp ...
- .NET 项目中的单元测试
.NET 项目中的单元测试 Intro "不会写单元测试的程序员不是合格的程序员,不写单元测试的程序员不是优秀的工程师." -- 一只想要成为一个优秀程序员的渣逼程序猿. 那么问题 ...
- 在 python 项目中如何记录日志
一. 概述 写本文的目的是我在写 python 项目的时候需要记录日志,我忘记怎么处理了,每次都需要去网上查一遍,好记性不如烂笔头, 这里把查阅的内容记录下来,方便以后查找. python 项目中记录 ...
- 项目中创建单元测试—VS2012
我们在每个项目的开发过程中,开发完一个功能,自己首先需要测试一下,VS提供了很方便的测试功能,可以很容易的创建单元测试,但是在VS2012中类名上点击右键没有『创建单元测试』这个菜单,需要先进行设置一 ...
- SpringMVC,MyBatis项目中兼容Oracle和MySql的解决方案及其项目环境搭建配置、web项目中的单元测试写法、HttpClient调用post请求等案例
要搭建的项目的项目结构如下(使用的框架为:Spring.SpingMVC.MyBatis): 2.pom.xml中的配置如下(注意,本工程分为几个小的子工程,另外两个工程最终是jar包): 其中 ...
- python 项目中包中__init__.py文件的作用
开发python项目时,我遇到了一个这样的现象,当我新建一个pythonpackage时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很不了解这个空文件的作用是什么, ...
- vue项目中添加单元测试
从网上找了很多例子关于单元测试,都是如何新建项目的时候的添加单元测试,用vue-cli中怎么添加,但是我的项目已经生成了,不能再一次重新初始化,这时如何添加单元测试,这里面遇到了好多坑,写在这里记录一 ...
- [git]安装git-pylint-commit-hook提高python项目中的代码质量
什么是'git-pylint-commit-hook' 我在工作中,团队为了保证代码和提高代码的质量,要求每个项目都要求安装git-pylint-commit-hook,它是个钩子,会在你提交代码到本 ...
随机推荐
- ecshop数据库结构和字段介绍(转载)
ecs_account_log:账户变动日志(注册用户充值.支付等记录信息)字段 类型 Null 默认 字段说明log_id mediumint(8) 否 无 日志IDuser_id mediumin ...
- 如何在vue中监听scroll,从而实现滑动加载更多
首先需要明确3个定义: 文档高度:整个页面的高度 可视窗口高度:你看到的浏览器可视屏幕高度 滚动条滚动高度: 滚动条下滑过的高度 当 文档高度 = 可视窗口高度 + 滚动条高度 时,滚动条正好到底. ...
- VSCode 云同步扩展设置 Settings Sync 插件
VSCode 云同步扩展设置 Settings Sync 插件 Hi.大家好,今天又是美好的一天. 关于 Settings Sync扩展: Settings Sync可以同步你当前的VSCode配置环 ...
- stack用法,queue用法,
stack stack 模板类的定义在头文件中. stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要 的,在不指定容器类型时,默认的容器类型为deque. 定义st ...
- 为什么选择 Spring 作为 Java 框架
1. 概述 在本文中,我们将讨论 Spring 作为最流行的 Java 框架之一的主要价值体现. 最重要的是,我们将尝试理解 Spring 成为我们选择框架的原因.Spring 的详细信息及其组成部分 ...
- [sublime3] 在linux下的终端中使用sublime3打开文件
通过ln命令创建软连接实现 echo $PATH 查看路径 例 我的路径是: /home/rh/anaconda3/bin:/home/rh/bin:/home/rh/.local/bin:/usr/ ...
- web-fragment模块化使用
用eclipse右键new->other->web->web fragment project 确定后修改dynamic web project name为你要输出到的项目,当然可以 ...
- mysql 学习第一天
RDBMS 术语 在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语: 数据库: 数据库是一些关联表的集合. 数据表: 表是数据的矩阵.在一个数据库中的表看起来像一个简单的电子表格 ...
- .net持续集成测试篇之Nunit文件断言、字符串断言及集合断言
使用前面讲过的方法基本上能够完成工作中的大部分任务了,然而有些功能实现起来还是比较麻烦的,比如说字符串相等性比较不区分大小写,字符串是否匹配某一正则规则,集合中的每一个(某一个)元素是否符合特定规则等 ...
- [ PyQt入门教程 ] PyQt5基本控件使用:单选按钮、复选框、下拉框
本文主要介绍PyQt5界面最基本使用的单选按钮.复选框.下拉框三种控件的使用方法进行介绍. 1.RadioButton单选按钮/CheckBox复选框.需要知道如何判断单选按钮是否被选中. 2.Com ...