测试代码单元测试unittest

一、单元测试和集成测试

  1. 集成测试
    你回想一下,你刚有一台属于自己的电脑的时候,你是如何确定它能够使用的呢?
    你会接上电源,然后按一下主机的开关按钮,然后会听到风扇开始转动的声音,这时候你的双眼会死死的盯住电脑的显示器,你的期望结果是:这个显示器等会会亮起来,然后有一个开机动画。
    过了一会之后,你的显示器亮了起来,和你想的一样,可以玩耍了。
    在这里,你按住开关按钮是测试的步骤,你死死盯住电脑期望它亮起来是你的测试断言。
    再想一下,如果结果和你的断言不符呢?
    也就是说:挖槽!居然显示器一直不亮,那还玩个毛线啊?
    这时候你可能会想:是不是主机里的电源没接好呢?是不是 CPU 烧坏了?是不是内存条没插好?是不是主板秀逗了?
    其实你的这一系列的测试动作,叫做集成测试,它主要是测试各个组件是否相互协作成功,也就是说,有时候你写的代码中,某个模块是可以运行的,但是和别的代码一起使用的时候,可能就会出现问题了。

集成测试一般是在单元测试之后的。

  1. 单元测试
    单元测试就是测试更小范围的东西,如一行代码、一个函数、一个class 、 一个模块等
    unittest 测试库 再举一个简单的例子
    结果正确的情况: 不正确的情况 测试 failed ,测试结果 与期望结果 不同,修改代码。
    用命令行执行测试用例 以上是为了方便理解,实际测试中不会直接在源代码中执行测试代码,需要额外创建一个 test.py 进行单元测试 现在要测试calc模块中的__init__.py 中的 add 方法
    在test.py 中写下测试代码如下 ,将测试代码与业务代码分离: 测试通过结果如下
    将 add 方法写错,测试不通过如下: 从测试结果看出,5+6 想要的结果是11,而 add 方法是乘积 30,说明方法存在问题。
    这里只用到了 assertEqual,判断是否与期望的结果相同,unittest 还封闭了其它方法,常用方法如下: 本篇只是对单元测试有个简单的认识,更高级的用法在下一篇继续吹。

二、unittest中常用的操作

接上文,面对项目中有多个方法函数需要测试的情况

这时要测试 add 和 minus 方法,同理是这样测试的

测试通过

系列测试 TextTestRunner

可以看到,这种方式不能改变测试的顺序,不太灵活,下面采用另外外测试方法
不是单个单个的测试,而是进行一个系列的测试,
首先在测试类中添加所有要测试的函数

这次主要区别是又新建一个测试文件 test_suite.py,其中导入 unittest 和 上一步写的测试类 TestCalc,接着获取TestSuite 对象,在 tests 列表中设定测试顺序,添加进测试对象,获取 TextTestRunner 对象,然后就可以 run 运行了。具体一步一步仔细看代码

测试通过:

跳过测试 skip

部分方法不用测试时可以选择跳过 skip
这里用装饰器调用 unittest 中的skip

从结果看到,成功跳过除法测试。

经过实践这里运行 test.py 才能输出

Skipped: 跳过 除法运算 测试!!!!

如果运行 test_suite.py 则只剩这个输出

unittest两个重要方法

setUp: 在执行测试前的准备动作
tearDown: 在执行测试后的操作

可以在测试类中添加这两个方法

从测试结果看到,除跳过 skip 没有调用外,每个测试均调用了测试前 setUp 和测试后 tearDown 方法,

对于异常的测试,比如我们这里除数不能为 0 ,那么当我们可以写一个测试方法,当这个方法触发 ZeroDivisionError 才能通过:

因此添加了以上代码,触发了 ZeroDivisionError ,才能通过

把参数 b 改成非 0 的其它数字后的输出

大概理解为:没有抛出异常,所以测试没有通过。