Python单元测试标准库unittest简单学习
1.背景
当需要测试较为复杂的module,class或者系统的功能时,如果一个一个的去测试就会显得很麻烦,如果每项测试又有一定的配置或者设置的话,比如每个测试都要新建一个对象之类的,那就更麻烦了。单元测试的初衷就是使得这些测试自动化,高效率的完成。有人可能会说自己写个程序全部用assert来判断就可以了啊,然而,assert在raise一个exception之后就停止工作了,自己再从头构建一个测试系统当然也可以,但是标准库unittest已经完成了这项工作,有必要了解下,避免重复造轮子。
2.单元测试中的几个重要的概念
(1)test fixture
test fixture是在进行单元测试前后所必须进行的操作,比如在每此测试前,创建数据库,新建文件,或者打开服务器;每次测试后的关闭文件,关闭服务器或者其他清理工作等。更直白的说,就是为单元测试顺利进行及结束所“营造”的一种环境。
(2)test case
test case是单元测试的最基本的要素,即单一场景被测试的正确与否,在单元测试中是以unittest.TestCase的实例来表现的,任何test cases必须是TestCase子类的实例。test case必须是自洽的(self contained),这样才能独立运行或者自由的跟其他test case组合在一起被测试。
(3)test suite
是test case,甚至与test suite的集合,用来进行一起有机的整体的测试。
(4) test runner
test runner 是一个可以有序的进行测试工作,然后把结果反馈给用户的组件,它可以是GUI,或者命令窗口式的,等等。
3.基本操作
以一个简单的例子来说明:
import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
if __name__ == '__main__':
unittest.main()
先上一个小的单元测试代码片段(用来测试string类的方法),通过TestStringMethods类(是unittest.TestCase的子类)来创建一个test case,该类的3个方法均以 'test'开头,这个告诉了test runner 哪些方法要被测试。
每个测试的关键是用assertEqual来核查预定结果,用assertTrue或者assertFalse来核查条件,用assertRaises来核查是否既定的exception被捕捉。
之前说test fixture的概念,那么“营造”测试的环境的工作是谁来完成的呢?答案是 setUp() 和 tearDown(),如果每次的测试前都需要 dosomething(),那么就把 dosomething() 放在setUp()方法中,如果每次测试后都需要 doanotherthing(),那么就把 doanotherthing()放在 tearDown()下;需要注意的是如果 setUp()报错了,就不再测试了,如果setUp()没报错,tearDown()都会被执行,不论测试成功与否。
4.启动方法
值得一提的是,最好将测试代码与被测试代码分成不同的文件。在测试时,可以直接运行测试代码,或者通过命令的方法。
python -m unittest test_module1 test_module2
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method
python -m unittest tests/test_something.py
python -m unittest -v test_module #冗杂模式,即提供更多测试信息
5.更多
详见python 官方文档。
Python单元测试标准库unittest简单学习的更多相关文章
- python笔记-标准库unittest
unittest核心工作原理 unittest中最核心的四个概念是:test case, test suite, test runner, test fixture. 一个TestCase的实例就是一 ...
- Python的标准库介绍与常用的第三方库
Python的标准库介绍与常用的第三方库 Python的标准库: datetime:为日期和时间的处理提供了简单和复杂的方法. zlib:以下模块直接支持通用的数据打包和压缩格式:zlib,gzip, ...
- 【python】标准库的大致认识
正如那句 Python 社区中很有名的话所说的:“battery included”,Python 的一大好处在于它有一套很有用的标准库(standard library).标准库是随着 Python ...
- Python 3标准库 第十四章 应用构建模块
Python 3标准库 The Python3 Standard Library by Example -----------------------------------------第十四章 ...
- C++标准库<string>简单总结
C++标准库<string>简单总结 在C++中,如果需要对字符串进行处理,那么它自带的标准库<string>无疑是最好的选择,它实现了很多常用的字符处理函数. 要想使用标准C ...
- python 使用标准库连接linux实现scp和执行命令
import stat import pexpect 只显示关键代码: sqldb = localpath+database //获取database名字 if os.path.exists(sqld ...
- python calendar标准库基础学习
# -*- coding: utf-8 -*-# 作者:新手__author__ = 'Administrator'#标准库:日期时间基础学习:calendar:处理日期#例1import calen ...
- 如何美观地打印 Python 对象?这个标准库可以简单实现
前不久,我写了一篇文章回顾 Python 中 print 的发展历史 ,提到了两条发展线索: 明线:早期的 print 语句带有 C 和 Shell 的影子,是个应用程序级的 statement,在最 ...
- python linecache标准库基础学习
#python标准库基础之:linecacge:高效读取文本文件#说明与作用"""可以从文件或者导入python模块获取文件,维护一个结果缓存,从而可以更高效地从相同文件 ...
- python StringIO标准库基础学习
#标准库:StringIO提供类文件API文本缓冲区#作用:可以处理内存中的文本,有2种不同的实现:cStringIP版本用c编写提高速度,StringIO用python来提供可移植性,与其他字符串连 ...
随机推荐
- idea中启动web、jsp项目
1. idea打开项目 选择要打开的项目的根目录 2. 项目配置 配置jdk modules配置 添加web 添加依赖 删除爆红的依赖 添加依赖目录或者jar 配置web.xml 配置lib 如果没有 ...
- deepseek-llamafactory模型微调并转为gguf
模型微调测试 基础设施配置 使用云计算平台 使用vscode进行配置 打开系统盘文件夹 llamafactory基础配置 git clone --depth 1 https://github.com/ ...
- [译] DeepSeek开源smallpond开启DuckDB分布式之旅
DeepSeek 正通过 smallpond(一种新的.简单的分布式计算方法)推动 DuckDB 超越其单节点的局限.然而,我们也需要探讨,解决了横向扩展的挑战后,会不会是带来新的权衡问题呢? 译者序 ...
- web站点常见漏洞及解决方法
1.PHP Web表单哈希冲突拒绝服务漏洞 漏洞分析:PHP 5.3.9之前版本在计算表单参数哈希值的实现上存在拒绝服务漏洞,该漏洞源于未提前限制哈希冲突.攻击者可利用该漏洞通过发送小量的特制webf ...
- wxformbuilder 如何生成python 代码
?问题 正常通过F8->F6 ,我执行这两步操作后如下图,以.fbp格式显示,没生成文件 解决方案 object properties 下勾选python 效果图:
- 解决Mac无法共享网络问题
前言 部分小伙伴在使用 Mac 共享网络会出现各种问题: 无法共享 共享后,手机无法连接网络 解决办法 重置网络即可. 三个步骤轻松解决 访达(Finder)前往文件夹:/Library/Prefer ...
- kali安装pdtm工具
kali安装pdtm工具 前言 今天想安装一下pdtm工具集的,但过程中一直出现各种错误,找了几篇文章之后并没有找到解决方法,后解决之后写了这样一篇文章希望可以解决大家在安装过程中碰到的部分问题 介绍 ...
- Thinkphp8多语言模式,语言包变量占位符实现方法。
主要实现原理是sprintf()函数,更多占位符写法可以参考sprintf()的介绍. zh-cn.php ...... // 变量用 s% 作为占位符 'sold_books' => 'Sol ...
- Linux reboot全过程
一.版本说明嵌入式Linux 下面的reboot命令看似简单,但出问题时定位起来发现别有洞天.下面就按在shell下执行reboot命令之后程序的执行过程进行解析.Busybox:1.23.2 ...
- 【数据结构与算法】第K大的元素:三路快速排序算法思路
第K大的元素:三路快速排序算法思路 Java https://leetcode-cn.com/problems/kth-largest-element-in-an-array/solution/di- ...