python中的单元测试模块unittest
unittest的属性:
该文以思维导图的形式描述unittest的重要属性。
其中前四个是unittest最核心的三个属性。
testcase:测试用例;
testsuite:测试套件,多个测试用例组成一个测试套件;
test runner:执行测试用例,该类中的run()方法会执行testsuite/testcase中的run()方法。测试的结果会保存在testresult中。
还有一个很重要的就是fixture,看着是挺陌生的,其实就是一个测试用例执行之前环境的准备和执行之后环境的销毁。
三、实例:
首先准备一些待测方法,functions.py:
def fun_div(x):
return x/2
def fun_add(x):
return x+2
def fun_minus(x):
return x-2
def fun_multi(x):
return x*2
接下来写一些测试用例来测这些方法,test.py
import unittest
from functions import fun_add,fun_minus,fun_multi,fun_div
class TestFun(unittest.TestCase):
times = 0
@classmethod
def setUpClass(cls):
print('setUpclass')
def setUp(self):
# 每个测试用例执行之前都会执行该方法
TestFun.times += 1
print('setUp', TestFun.times)
def tearDown(self):
# 每个测试用例执行之后都会执行该方法
TestFun.times += 1
print('tearDown', TestFun.times)
def test1(self):
# 测试用例1:fun_div
# 使用unittest提供的断言验证functions中的函数的正误
# 如果不相等就会失败
self.assertEqual(2, fun_div(4))
self.failUnlessEqual(2, 2)
# 如果表达式为False,测试失败
self.assertTrue(1 < 2)
self.failUnless(2 == 2)
# 如果两个值相等,就会测试失败
self.assertNotEqual(2, 1)
def test2(self):
# 测试用例2:fun_add
self.assertNotEqual(2, 1)
def test2(self):
# 测试用例2:fun_add
self.assertTrue(fun_add(6) == 8)
def test3(self):
# 测试用例3:fun_minus
self.assertNotEqual(6, fun_minus(6))
self.assertEqual(4, fun_minus(6))
def test4(self):
# 测试用例4:fun_multi
self.assertIsInstance(4, int)
self.assertEqual(8, fun_multi(4))
@unittest.skipIf(True, 'no')
def test5(self):
print('跳过!')
@classmethod
def tearDownClass(cls):
print('tearDownClass')
if __name__ == '__main__':
# unittest.main()
suit = unittest.TestSuite()
suit.addTest(TestFun('test1'))
suit.addTest(TestFun('test2'))
suit.addTest(TestFun('test3'))
suit.addTest(TestFun('test4'))
runner = unittest.TextTestRunner()
runner.run(suit)
执行结果:
解释:
1、setUp和tearDown是每个用例的环境准备和环境销毁函数,也就是在每个用例执行之前要执行一次setUp函数,每个用例执行之后会执行一次tearDown函数;
2、setUpClass和tearDownClass是所有用例的环境准备和环境销毁函数,也就是说,在这么多用例执行之前只会执行一次setUpClass函数,执行之后会执行一次tearDownClass函数,举例来说,比如此次测试用例需要使用数据库,那么在setUpClass函数中就会进行数据库连接,在tearDownClass函数中进行数据库断开;
3、一般执行测试用例,都会使用testsuit的addTest()方法将要执行的用例放在一个测试套件中,创建一个testrunner对象,然后调用该对象的run()方法;
4、skip是一个装饰器,可以屏蔽一些测试用例,此功能可以用于调试测试用例。(大型项目中,执行所有的用例需要用很久的时间,但是我们刚好需要调试某个用例,就可以把其他的用例屏蔽掉);
5、一个测试用例类都会继承于TestCase类;
6、测试用例报告可以使用TextTestRunner输出(txt报告),也可以用HTMLTestRunner输出(html报告)。
————————————————
版权声明:本文为CSDN博主「peiyao456」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/peiyao456/article/details/81542377
python中的单元测试模块unittest的更多相关文章
- Python中的单元测试模块Unittest快速入门
前言 为什么需要单元测试? 如果没有单元测试,我们会遇到这种情况:已有的健康运行的代码在经过改动之后,我们无法得知改动之后是否引入了Bug.如果有单元测试的话,只要单元测试全部通过,我们就可以保证没有 ...
- python中的单元测试pyUnit
python中的单元测试pyUnit 在Python中进行单元测试时需要用到PyUnit模块,Python 2.1及其以后的版本都将PyUnit作为一个标准模块,但如果你使用的是较老版本的Pyth ...
- Python中的random模块,来自于Capricorn的实验室
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- Python中的logging模块
http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...
- Python中的random模块
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- 浅析Python中的struct模块
最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结. 了解c语言 ...
- python中的StringIO模块
python中的StringIO模块 标签:python StringIO 此模块主要用于在内存缓冲区中读写数据.模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中.此类中的大部分 ...
- python中的select模块
介绍: Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqu ...
- Python中的re模块--正则表达式
Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...
随机推荐
- PHP截取指定字符前的字符串
$str = 'A|B||C|D'; echo substr($str,0,strpos($str, '||')); 输出:A|B
- Java开发程序员必须要学会的linux命令总结
查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. find . -name "*.xml" 递归查找所有的xml文 ...
- mybatis-generator-plugin
1.背景 这篇文章刚开始想着哪个分类呢?mybatis.idea或是maven呢,最后还是选择了mybatis.最初使用这个逆向工具是在eclipse上,使用的是eclispe上mbg插件执行配置ge ...
- Java 的 String.split 函数,消除空字符串
代码: String str = "the music made it hard to concentrate"; String delims = "[ ]+" ...
- android 使用 git 进行版本控制
远程建立仓库 vcs --> import into version control --> create git respository 选中整个工程(project 页面) vcs - ...
- HTML学习第二天
HTML学习第二天 今天学的比较少,有些乱,先只写一个知识点 三种样式表插入方式 外部样式表: <link rel="stylesheet" type="text/ ...
- Kafka--初识Kafka
前言 数据为企业的发展提供动力.我们从数据中获取信息,对他们进行分析处理,然后生成更多的数据.每个应用程序都会产生数据,包括日志消息,度量指标,用户活动记录,响应消息等.数据的点点滴滴都在暗示一些重要 ...
- R语言 plot()函数 基础用法
plot(x=x轴数据,y=y轴数据,main="标题",sub="子标题",type="线型",xlab="x轴名称" ...
- Vulkan SDK之Vertex Buffer
A vertex buffer is a CPU-visible and GPU-visible buffer that contains the vertex data that describes ...
- 基于云开发开发 Web 应用(三):云开发相关数据调用
介绍 在完成了 UI 界面的实现后,接下来可以开始进行和云开发相关的数据对接.完成数据对接后,应用基础就打好了,接下来的就是发布上线以及一些小的 feature 的加入. 配置 在进行相关的配置调用的 ...