本文实例讲述了Python单元测试分享給大家供大家参考,具体如下:
在Python中进行单元测试需要用到自动单元测试框架PyUnitPython2.1及其以后的版本都将PyUnit作为一个标准模块(即python的unittest模块),如果你很out那么你需要从PyUnit网站下载源码安装后才能使用。
一、Python单元测试范例
测试最基本的原理是比较预期结果是否与实际执行结果相同如果相同则测试成功,否则测试失败为了更好地理解自动测试框架PyUnit,下面会以对Widget类进行测试为例说明之:
软件测试中最基本的组成单元式測试用例(test case)PyUnit使用TestCase类来表示测试用例,并要求所有用于执行测试的类都必须从该类继承TestCase子类实现的测试代码应该是自包含的(self contained),即測试用例既可以单独运行也可以和其它测试用例构成集合共同运行。TestCase类中常用的函数或方法有:
一个测试用例只对软件模块中一个方法進行测试采用覆盖runTest()方法来构造测试用例,这在PyUnit中称之为静态方法举例说明如下:
如果采用静态方法,Python程序员就不得不为每个要测试的方法编写一个测试类该类通过覆盖runTest()
方法来执行测试,并在每个测试类中生成一个待测试的对象这样会非常繁琐与笨拙。
鉴于静态方法嘚缺陷PyUnit提供了另一种高帅富的解决方法,即动态方法只编写一个测试类来完成对整个软件模块的测试,这样对象的初始化工作可以在setUp()
方法中完成而资源的释放则可以在tearDown()
方法中完成,举例说明如下:
动态方法不再覆盖runTest()方法而是为测试类编写多个测试方法,按照惯例这些方法通常以test开头但这不是必须的在创建TestCase子类的实例时必须给出测试方法的名称来为PyUnit测试框架指明运行该测试用例时应该调用测试类中嘚哪些方法,这通常会结合测试用例集TestSuite一起使用
完整的单元测试很少只执行一个测试用例,开发人员通常需要编写多个测试用例才能对某一软件功能进行比较完成的测试这些相关的测试用例称为一个测试用例集,在PyUnit中是用TestSuite类来表示的PyUinit测试框架允许Python程序员在单元测试代碼中定义一个名为suite()的全局函数,并将其作为整个单元测试的入口PyUnit通过调用它来完成整个测试过程:
也可以直接定义一个TestSuite的子类,并在其初始化方法__init__中完成所有测试用例的添加:
这样只需要在suite()方法中返回该类的一个实例就可以了:
在PyUnit测试框架中TestSuite类可以看成是TestCase类的一个容器,用来对多个测试用例进行组织这样多个测试用例可以自动在一次测试中全部完成。事实上TestSuite除了可以包含TestCase外,也可以包含TestSuite从而可以構成一个更庞大的测试用例集:
编写测试用例(TestCase)并将它们组织成测试用例集(TestSuite)的最终目的只有一个:实施测试并获得最终结果。PyUnit使用TestRunner類作为测试用例的基本执行环境来驱动整个单元测试过程。但是Python开发人员在进行单元测试时一般不直接使用TestRunner类而是使用其子类TextTestRunner来完成測试,并将测试结果以文本方式显示出来举例说明如下:
使用如下命令执行该单元测试:
默认情况下,TextTestRunner将结果输出到sys.stdout/sys.stderr上但是如果在创建TextTestRunner类实例时将一个文件对象传递给了构造函数,则输出结果将被重定向到该文件中
PyUnit模块中定义了一个名为main的全局方法,使用它可以很方便地将一个单元测试模块变成可以直接运行的测试脚本main()方法使用TestLoader类来搜索所有包含在该模块中的测试方法,并自动执行它们如果Python程序員能够按照约定(以test开头)来命令所有的测试方法,那么只需要在测试模块的最后加入如下几行代码即可:
下面是利用main()方法来进行测试的唍整例子:
使用如下命令执行上面的单元测试:
如上这样将执行WidgetTestCase中的所有测试方法但是如果只想执行testSize()方法,则可以如下这般:
如果在单え测试脚本中定义了TestSuite还可以指定要运行的测试集,使用-h参数可以查看运行该脚本所有可能用到的参数:
需要注意的是:PyUnit的TestCase中如果有多个test_xxx则默认按照xxx的字母顺序执行测试用例函数,如果test_xxx之间有依赖关系的话就会出错解决方法有二:1、解耦;2、编写xxx函数时人为地按字母顺序。
当然如果你安装了Python 2.7.2及以上版本,你还可以利用discover函数来自动发现并执行测试用例:
更多关于Python单元测试的资料可以参看还有。
更多Python相關内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家Python程序设计有所帮助