python3基础---测试代码

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

1 测试函数

示例:
python3基础---测试代码
python3基础---测试代码

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

1.1 单元测试和测试用例

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

1.2 可通过的测试

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

示例:
python3基础---测试代码

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

1.3 不能通过的测试

示例:
修改函数,使其支持中间名。
python3基础---测试代码
python3基础---测试代码

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

1.4 测试未通过怎么办

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

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

1.5 添加新测试

python3基础---测试代码

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