编写函数或类时,还可为其编写测试。通过测试,可确定代码面对各种输入都能够按要求的那样工作。测试让你信心满满,深信即使有更多的人使用你的程序,它也能正确地工作。在程序中添加新代码时,你也可以对其进行测试,确认它们不会破坏程序既有的行为。程序员都会犯错,因此每个程序员都必须经常测试其代码,在用户发现问题前找出它们。使用Python模块unittest中的工具来测试代码,你将学习编写测试用例,核实一些列输入都将得到预期的输出。你将看到测试通过了是什么样子,测试未通过又是什么样子,还将知道测试未通过如何有助于改进代码。你将学习如何测试函数和类,并将知道应该为项目编写对少个测试。
单元测试和测试用例:
Python标准库中的模块unittest提供了代码测试工具。单元测试用于核实函数的某个方面没有问题;测试用例是一组单元测试,这些测试一起核实函数在各种情形下的行为都符合要求。良好的测试用例考虑到了函数可能收到的各种输入,包含针对所有这些情形的测试。全覆盖测试用例包含一整套单元测试,涵盖了各种可能的函数使用方式。对于大型项目,要实现全覆盖可能很难,通常,只要针对代码的重要行为编写测试即可,等项目被广泛使用时,再考虑全覆盖。
可通过的测试:
创建测试用例的语法需要一段时间才能习惯,但测试用例创建后,再添加针对函数的单元测试就很简单了。要为函数编写测试用例,可先导入模块unittest以及要测试的函数,再创建一个继承unittest。TestCase的类,并编写一些列方法对函数行为的不同方面进行测试。
断言方法用来核实得到的结果是否与期望的结果一致:
测试未通过时怎么办:测试未通过时怎么办呢?如果你检查的条件没错,测试不通过意味着函数的行为是对的,而测试未通过意味着你编写的新代码有错。因此,测试未通过时,不要修改测试,而应修改导致测试不能通过的代码;检查刚对函数的修改,找出导致函数行为不符合预期的修改。
测试类:
Python在unittest.Testlase类中提供了很多断言方法。断言方法检查你认为应该满足的条件是否确实满足。如果该条件确实满足,你对程序行为的假设就得到了确认,你就可以确信其中没有错误。如果你认为应该满足的条件并不满足,Python将发生异常。
unittest
assertEqual( a , b ) 核实a==b
assertNotEqual( a , b ) 核实a!=b
assertTure(x) 核实x为Ture
assertFalse(x) 核实x为False
assertIn(item,list) 核实item在list中
assertNotIn(item,list) 核实item不在list中
测试自己编写的类时,方法setup()让测试方法编写起来更容易:可在setup( )方法中创建一系列实例,并设置他们的属性,而在测试方法中直接使用这些实例。相比于在每个实例并设置其属性,这要容易得多。
注意:运行测试用例时,每完成一个单元测试。
Python都打印一个字符:测试通过时打印一个句点;测试引发错误时打印一个E;测试导致断言失败时打印一个F。
这就是你运行测试用例时,在输出的第一行中看到的句点和字符,数量不相同的原因。如果测试用例包含很多单元测试,需要运行很长时间,就可以通过观察这些结果来获悉有多少个测试通过了。