首页 > 代码库 > 测试代码

测试代码

   编写函数或类时,还可以为其编写测试。通过测试,可确定代码面对各种输入都能够按照要求那样工作。

 

单元测试和测试用例:

  单元测试用于核实蛮熟的某个方面没有问题;测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求。

良好的测试用例考虑到了函数可能收到的各种输入,包含针对这些所有情形的测试。

全覆盖测试用例包含一整套单元测试,涵盖了各种可能的函数使用方式。对于大型项目,要实现覆盖可能很难。所以通常,最初只要针对

代码的重要行为编写测试即可,等项目被广泛使用率再考虑全覆盖。

 

范例代码:

#!/usr/bin/env python

#filename = name_function.py

def get_formated_name(first,last):

    full_name = first + ‘ ‘ + last

    return full_name

定义了一个函数模块,叫做get_formated_name

编写一个测试代码,对这个函数进行测试!

#!/usr/bin/env python

import unittest

from name_function import get_formated_name

class Test_names(unittest.TestCase):    

    def test_first_last_name(self):

        formated_name = get_formated_name(‘xue‘,‘lingming‘)   

        self.assertEqual(formated_name , ‘xue lingming‘)    ③

unittest.main()

首先,导入模块unittest(这是个class),和需要测试的函数get_formatted_name

在1处,创建一个类,这个类的名字叫做Test_names(可以随意定义),在这个类中必须继承unittest的一个子类

unittest.TestCase,这个类中只包含一个方法,用于测试get_formatted_name是否可以正确格式化名字。

在unittest模块的测试代码下,所有test_开始的方法都是自动运行的。

在3处,我们使用了unittest类最有用的功能之一:断言

用来核实得到的结果是否与期望的结果一直。

代码self.assertEqual(formated_name , ‘xue lingming‘) 的意思是说:“将formated_name的值与‘xue lingming‘进行比较

如果相等就万事大吉,如果不同就报告’’”

 

运行这个测试脚本的结果:

"test_name_function.py" 11L, 291C written
[root@Python-Test Alben-PY]# ./test_name_function.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

 

修改上面的函数,让其可以处理中间名:

#!/usr/bin/env python

#filename = name_function.py

def get_formated_name(first,middle,last):

    full_name = first + ‘ ‘ + middle + ‘ ‘ + last

    return full_name

 再次测试:

报错了!!!

[root@Python-Test Alben-PY]# ./test_name_function.py
E  """"""""这个E代表Error""""""""
======================================================================
ERROR: test_first_last_name (__main__.Test_names)
----------------------------------------------------------------------
Traceback (most recent call last):
File "./test_name_function.py", line 8, in test_first_last_name
formated_name = get_formated_name(‘xue‘,‘lingming‘)
TypeError: get_formated_name() missing 1 required positional argument: ‘last‘  这一行提示我们少一个实参‘last‘

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (errors=1)

解读——

因为在函数name_function中,我们定义了三个形参“first,middle,last”而测试代码中,只传递了2个位置实参,导致形参‘last’没有获取到实参,进而报错了。

处理方法:把形参middle定义为可选形参,并且微调主体脚本

#!/usr/bin/env python

#filename = name_function.py

def get_formated_name(first,last,middle=‘‘):

    if middle:

        full_name = first + ‘ ‘ + middle + ‘ ‘ + last

    else:

        full_name = first + ‘ ‘ + last

    return full_name

只需注意一下,带有默认值的可选形参必须放在最后一个。

测试效果:

[root@Python-Test Alben-PY]# ./test_name_function.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

 

测试代码