python3基础---测试代码

编写函数或类时,还可为其编写测试。通过测试,可确定代码面对各种输入都能够按要求的那样工作。
在程序中添加新代码时,你也可以对其进行测试,确认它们不会破坏程序既有的行为。

  • 1 测试函数
    • 1.1 单元测试和测试用例
    • 1.2 可通过的测试
    • 1.3 不能通过的测试
    • 1.4 测试未通过怎么办
    • 1.5 添加新测试
  • 2 测试类
    • 2.1 断言方法
    • 2.2 需测试的类及测试
    • 2.3 方法setUp()

1 测试函数

示例:
python3基础---测试代码_第1张图片
python3基础---测试代码_第2张图片

每次修改函数都需要进行测试,这种太烦琐了。Python提供了一种自动测试函数输出的高效方式。

1.1 单元测试和测试用例

Python标准库中的模块unittest 提供了代码测试工具。
单元测试 用于核实函数的某个方面没有问题;
测试用例 是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求。良好的测试用例考虑到了函数可能收到的各种输入,包含针对所有这些情形的测试。
全覆盖式测试 用例包含一整套单元测试,涵盖了各种可能的函数使用方式。对于大型项目,要实现全覆盖可能很难。通常,最初只要针对代码的重要行为编写测试即可,等项目被广泛使用时再考虑全覆盖。

1.2 可通过的测试

创建测试用例的语法需要一段时间才能习惯,但测试用例创建后,再添加针对函数的单元测试就很简单了。要为函数编写测试用例,可先导入模块unittest 以及要测试的函数,再创建一个继承unittest.TestCase 的类,并编写一系列方法对函数行为的不同方面进行测试。

示例:
python3基础---测试代码_第3张图片

第1行的句点表明有一个测试通过了。
接下来的一行指出Python运行了一个测试,消耗的时间不到0.001秒。
最后的OK 表明该测试用例中的所有单元测试都通过了。

1.3 不能通过的测试

示例:
修改函数,使其支持中间名。
python3基础---测试代码_第4张图片
python3基础---测试代码_第5张图片

第1行输出只有一个字母E ,它指出测试用例中有一个单元测试导致了错误。
下面提示哪个测试未通过及原因。
下面看到运行了几个单元测试,此例运行了一个单元测试。
最后,还看到了一条消息,它指出整个测试用例都未通过,因为运行该测试用例时发生了一个错误。

1.4 测试未通过怎么办

测试未通过时,不要修改测试,而应修复导致测试不能通过的代码:检查刚对函数所做的修改,找出导致函数行为不符合预期的修改。

就这里而言,最佳的选择是让中间名变为可选的.
示例:
python3基础---测试代码_第6张图片
python3基础---测试代码_第7张图片

1.5 添加新测试

python3基础---测试代码_第8张图片

方法名必须以test_打头,这样它才会在我们运行test_name_function.py时自动运行。
这个方法名清楚地指出了它测试的是get_full_name() 的哪个行为,这样,如果该测试未通过,我们就会马上知道受影响的是哪种类型的姓名。
在TestCase 类中使用很长的方法名是可以的;这些方法的名称必须是描述性的,这才能让你明白测试未通过时的输出;这些方法由Python自动调用,你根本不用编写调用它们的代码。

2 测试类

编写了针对单个函数的测试,下面来编写针对类的测试。

2.1 断言方法

Python在unittest.TestCase 类中提供了很多断言方法。
断言方法检查你认为应该满足的条件是否确实满足。如果该条件确实满足,你对程序行为的假设就得到了确认,你就可以确信其中没有错误。如果你认为应该满足的条件实际上并不满足,Python将引发异常。

unittest模块中常用的断言方法:

使用这些方法可核实返回的值等于或不等于预期的值、返回的值为True 或False 、返回的值在列表中或不在列表中。你只能在继承unittest.TestCase 的类中使用这些方法。

断言方法 用途
assertEqual(a, b) 核实a == b
assertNotEqual(a, b) 核实a != b
assertTrue(x) 核实x 为True
assertFalse(x) 核实x 为False
assertIn(item , list ) 核实 item 在 list 中
assertNotIn(item , list ) 核实 item 不在 list 中

2.2 需测试的类及测试

需测试的类:
python3基础---测试代码_第9张图片
类的使用:
python3基础---测试代码_第10张图片
测试AnonymousSurvey 类:
python3基础---测试代码_第11张图片
python3基础---测试代码_第12张图片

2.3 方法setUp()

python先运行方法setUp(),再运行各个以test_打头的方法。
测试自己编写的类时,方法setUp() 让测试方法编写起来更容易:可在setUp() 方法中创建一系列实例并设置它们的属性,再在测试方法中直接使用这些实例。相比于在每个测试方法中都创建实例并设置其属性,这要容易得多。

示例:
python3基础---测试代码_第13张图片

注意:  运行测试用例时,每完成一个单元测试,Python都打印一个字符:测试通过时打印一个句点;测试引发错误时打印一个E ;测试导致断言失败时打印一个F 。这就是你运行测试用例时,在输出的第一行中看到的句点和字符数量各不相同的原因。如果测试用例包含很多单元测试,需要运行很长时间,就可通过观察这些结果来获悉有多少个测试通过了。

你可能感兴趣的:(#,python基础)