测试代码模块
编写函数或类时,还可为其编写测试。通过测试,可确定代码面对各种输入都能够按要求的那样工作。在程序中添加新代码时,你也可以对其进行测试,确认它们不会破坏程序既有的行为。
使用Python模块unittest 中的工具来测试代码
【注意】:测试代码所在的类,必须继承unittest.TestCase继承类
(1)单元测试与测试用例
Python标准库中的模块unittest提供了代码测试工具。
1、单元测试用于核实函数的某个方面没有问题;
2、测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求。
良好的测试用例考虑到了函数可能收到的各种输入,包含针对所有这些情形的测试。
3、全覆盖式测试用例包含一整套单元测试,涵盖了各种可能的函数使用方式。
对于大型项目,要实现全覆盖可能很难。通常,最初只要针对代码的重要行为编写测试即可,等项目被广泛使用时再考虑全覆盖。(一般都做不到)
(2)可通过的测试
创建测试用例的语法需要一段时间才能习惯,但测试用例创建后,再添加针对函数的单元测试就很简单了。
【编写函数测试模块语法】:
要为函数编写测试用例,可先导入模块unittest 以及要测试的函数,再创建一个继承unittest.TestCase 的类,并编写一系列方法对函数行为的不同方面进行测试。
import unittest #导入测试模块
from name_function import get_formatted_name
class NamesTestCase(unittest.TestCase): #必须继承unittest.TestCase类
"""测试name_function.py"""
def test_first_last_name(self): # 所有以test打头的方法都将被Python自动执行(测试类中,继承unittest.TestCase的类表示测试类)
"""能够正确地处理像Janis Joplin这样的姓名吗?"""
formatted_name = get_formatted_name('janis', 'joplin')#需测试的函数(自定义函数)得到的结果
self.assertEqual(formatted_name, 'Janis Joplin') #调用unittest 的方法assertEqual() 断言方法
#将自己的函数得出的解果与正确结果进行比较,若正确,则输出ok,反之输出error
unittest.main()#运行测试代码
(3)断言方法
使用了unittest 类最有用的功能之一:一个断言方法。断言方法用来核实得到的结果是否与期望的结果一致,即检查你认为应该满足的条件是否确实满足。
例如:
self.assertEqual(formatted_name, ‘Janis Joplin’)
我们调用unittest 的方法assertEqual() ,并向它传递formatted_name 和’Janis Joplin’ 。代码行self.assertEqual(formatted_name, ‘Janis Joplin’) 的意思是 说:“将formatted_name 的值同字符串’Janis Joplin’ 进行比较。
(4)重复进行测试
修改自己的函数,既可实现重复测试
(5)运行测试文件
代码行unittest.main()让Python运行这个文件中的测试代码。
A、通过测试结果如下:
.