在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工做。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。编程
上面这段内容摘自维基百科。可能有不少同窗搞不明白什么是单元测试。即便搜了不少资料,也仍是搞不明白。你们可能对单元测试有一个误解,以为单元测试是开发作的,跟测试同窗扯不上关系,实际上单元测试不论是开发仍是测试同窗均可以作。笔者将用本身的理解来解释一下什么是单元测试。同时下面也会给出例子让你们更深刻了解什么是单元测试。好比咱们如今有一个加法函数,须要咱们输入两个值,那么咱们怎么保证咱们写的函数是没有问题的呢?是否是要调用这个函数,而后传入两个值,查看返回值是否正确?其实这就是在作单元测试。固然咱们没有用规范的作法去作单元测试,那么什么是规范的方法呢?下面我将会以代码形式举例进行介绍。仍是用加法函数来进行举例。以下面代码所示:微信
def add(a, b): return a + b print(add(1, 3))
咱们已经定义一个add函数,如今调用add函数,传入1和3,而后把返回值进行打印,经过打印咱们发现打印的结果为4,能够初步这个函数是没问题的,可是咱们知道一组数据不能证实这个函数是没错的,因此咱们须要多验证几回,这个时候咱们又加入了一行测试代码,以下面代码所示:框架
def add(a, b): return a + b print(add(1, 3)) print(add('a', 3))
运行以后咱们发现咱们的程序报错了,报错内容以下:函数
Traceback (most recent call last):
File "F:/blogApiTest/test2.py", line 6, in单元测试
print(add('a', 3))
File "F:/blogApiTest/test2.py", line 2, in add
return a + b
TypeError: must be str, not int
原来字符串和数字不能相加!固然咱们你们都知道在Python程序里字符串和整型不能相加,可是咱们就是要传入字符串和整型进行相加,结果程序奔溃了。因此咱们能够说这个add函数是有bug的,那么咱们来修复一下上面代码,以下面代码所示:测试
def add(a, b): if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float): return a + b else: return "请输入数字" print(add(1, 3)) print(add('a', 3))
经过测试后咱们发现程序已经被咱们修复,可是这里咱们思考一下,咱们在编写测试用例的时候都要写一个预期结果,可是代码中并无写预期结果,预期结果在咱们的脑海里,咱们根据打印出来的实际结果跟咱们脑海中预期结果进行比对,若是一致说明程序是没问题的,若是不一致,程序是有问题的。想一想看,其实挺麻烦的,那么咱们有没有办法在代码中写上预期结果和实际结果呢?答案是确定的,有!使用assert断言!设计
assert通常格式是assert condition , 若是condition为false,那么raise一个AssertionError出来。好比咱们断言1和2是否相等,能够写成 assert 1==2 。知道这个逻辑咱们就能够给咱们的add函数加上断言,以下代码所示:code
def add(a, b): if type(a) == int and type(b) == int: return a + b else: return "请输入数字" assert add(1, 2) == 3 assert add(1, 3) == 3
运行以后咱们会发现程序报出异常,以下代码所示:对象
Traceback (most recent call last):
File "F:/blogApiTest/test2.py", line 9, inblog
assert add(1, 3) == 3
AssertionError
经过上面异常咱们发现,若是预期结果和实际结果不一致时,assert断言只抛出 AssertionError,这样咱们很难搞清断言为何失败,对于咱们排查错误时也形成没必要要的时间浪费。那么有没有别的方法能够很快知道为何会断言失败呢?答案是有的,使用Python Unittest单元的测试框架。
欢迎关注微信公众号:软件测试汪。软件测试交流群:809111560