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,(这个号码是我随便写的,请不要拨打),我们 ...
随机推荐
- 040、Java中逻辑运算之短路与运算“&&”
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- flutter安装中的一些方法
1.配置flutter环境变量 进入终端 vim ~/.bash_profile export ANDROID_HOME=~Library/Android/sdk export PATH=$PATH: ...
- 三、深入Vue组件——Vue插槽slot、动态组件
一.插槽slot() 1.1简单插槽slot [功能]用于从父组件中,通过子组件写成双标签,向子组件中放入自定的内容 parent.vue [1]首先把child写成双标签样式,把要插入的内容放双标签 ...
- @Resource 和@Autowired区别
@Autowired 该注解是由spring提供的 按照类型注入 public class UserService { @Autowired private UserDao userDao; } 这样 ...
- Golang的选择结构-if语句
Golang的选择结构-if语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.选择语句应用场景概述 选择结构也称为条件判断,生活中关于判断的场景也非常的多,比如: ()登录Q ...
- duilib 之 List控件
List控件是我们常用到的控件,也是应用很广泛. 对LIST控件添加元素有两种方法,一种是直接在XML中写死元素,另一种是动态创建.另外,LIST的应用也分为两种,一种需要表头,另一种是不需要表头.对 ...
- 关于Arduino MEGA2560 看门狗对bootloader的依赖
bootloader在Arduino中起着至关重要的位置,arduino-1.5.6-r2版本中的bootloader对看门狗(watchdog)的bug进行了修复:mega2560其实就是使用的AV ...
- 【LeetCode】不同二叉搜索树
[问题] 卡特兰(Catalan)数来源于卡特兰解决凸n+2边形的剖分时得到的数列Cn,在数学竞赛.信息学竞赛.组合数学.计算机编程等方面都会有其不同侧面的介绍.卡特兰问题的解决过程应用了大量的映射方 ...
- Android Studio 移动虚拟机
突然间发现C盘 空间占用量增加了很多,经过找寻原因之后发现是因为安装了虚拟机的原因:在Android Studio中安装运行虚拟机时,默认的安装路径一般都在C盘,对于我这种不喜欢C盘存储太满的人来说是 ...
- WCF基础调用
WCF学习demo代码下载 调用:启动wcf服务程序,然后建立一个控制台应用程序 建立wcf程序 添加 using System; using System.Collections.Generic; ...