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来提供可移植性,与其他字符串连 ...
随机推荐
- WPF调用FishSpeech的Demo
写了一个FishSpeech的教程:使用FishSpeech进行语音合成推理 - 天命小猪 - 博客园 研究了一下如何调用服务器API,朗读文本. 经过调研,决定使用NAudio库播放音频.遇到了一些 ...
- Docker - 在docker中部署Nginx
1.docker search 查找ngix 2.docker pull下载镜像 3.查看镜像列表 4.docker run启动容器 5.测试nginx容器是否启动成功 1.docker search ...
- 关于Processing开发应用及发布分享的一些经验分享
从2015年10月份开始接触Processing,到现在的2021年9月底,足足有6年了!笔者会竭尽全力把所有学到的知识.经验分享出来.这篇是关于Processing开发应用及发布分享的一些内容,可能 ...
- job提交后,inp文件的处理过程
用户提交job后,abaqus的inp文件处理过程 1. 对inp文件预处理 打开任务管理器可以看到pre.exe的进程 预处理中的error .warning 都会在.DAT文件中 dat文件出现e ...
- manim边学边做--线性变换的场景类
在数学可视化领域,Manim的LinearTransformationScene类为线性代数教学提供了强大的工具. 这个专门设计的场景类继承自VectorScene,通过内置的变换动画和坐标系管理,能 ...
- VM虚拟机的安装使用
虚拟机的安装使用 1.安装win10镜像 1.点击创建新虚拟机 2.选择典型,然后下一步 3.稍后安装操作系统,然后下一步 4.选择windows操作系统,版本为win10 x64,然后下一步 5.虚 ...
- js解析json字符串、对象与json之间的转换
前言 在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键. js解析json字符串 // JSON字符串 'v ...
- Java的IO模型、Netty原理详解
1.什么是IO 虽然作为Java开发程序员,很多都听过IO.NIO这些,但是很多人都没深入去了解这些内容. Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的 ...
- Netty源码—10.Netty工具之时间轮
大纲 1.什么是时间轮 2.HashedWheelTimer是什么 3.HashedWheelTimer的使用 4.HashedWheelTimer的运行流程 5.HashedWheelTimer的核 ...
- datasnap的多表更新
补课很多,xe一路走来,提供了许许多多的多层数据处理的方法.确实已经提供数个最优方案. 把下面的图跑通了,也就解决核心问题了. [Berlin datasnap开发手册p261] 补充: