博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHPUnit学习02---如何管理TestCase
阅读量:7246 次
发布时间:2019-06-29

本文共 2572 字,大约阅读时间需要 8 分钟。

本文目的

本文介绍了phpunit通用函数用法,整体架构,和如何使用TestSuite来管理项目的所有的测试用例。

批量运行

当配置好phpunit后,可以使用“phpunit someTestCase”命令执行单个用例,使得用例的执行很方便。但是如果testcase分散到多个文件中,一个一个的执行phpunit就变得很麻烦了。好在,phpunit命令提供了一些可选参数,可以使得批量处理Test Case变得容易,可以直接执行phpunit查看这些可选参数,如下所示:

上图中,红圈标注的地方就是用于批量运行测试用例的参数,同时,phpunit也可以默认的执行指定目录下*Test.php文件中的测试用例,并且是迭代的遍历所有子目录,如下面的例子:

在test/UnitTestDemo目录下面四个文件,只有两个文件是以*Test.php格式结尾,所以运行“phpunit test”命令可以批量的运行这些符合要求的用例。如果你希望更细粒度的控制执行特定用例,可以使用“--filter”参数,该参数通过过滤用例文件名称来执行特定文件中的测试用例。

命名约定

PHPUnit中默认的命令规则,可以使得运行测试用例变得十分方便。列举如下:

  • 自动执行每个TestCase类中test***形式的方法
  • 自动执行目录下*Test.php形式命名中的用例

一旦遵守了这些命名约定,编写单元测试将会更加便捷。

setUp和tearDown

setUp和tearDown可以帮助我们搭建和清理测试环境,TestCase和TestSuite两个类均有这对函数,可以共用户重载。但是,需要注意这两对函数调用的时机不一样,在TestCase中,每一次test***方法调用前均会调用setUp方法,调用后均会调用tearDown方法。但是,在TestSuite中,只会在第一个testCase调用之前调用setup,最后一个testCase调用后,调用tearDown。可以通过下面的例子,了解整个调用过程。

代码如下:

MySuite.php

return new MySuite('MyTest');    }    protected function setUp()    {        print "\nMySuite::setUp()";        }    protected function tearDown()    {        print "\nMySuite::tearDown()";    }}?>

 

MyTest.php

protected function tearDown()    {        print "\nMyTest::tearDown()";    }    public function testOne()    {        print "\nMyTest::testOne()";    }    public function testTwo()    {        print "\nMyTest::testTwo()";    }}?>

PHPUnit系统架构

上图展示的PHPUnit库的架构,看起来是不是似曾相识?如果你了解设计模式,应该不难发现PHPUnit的整体架构采用的“组合设计模式”,定义如下:

组合设计模式将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.组合设计模式比较容易理解,它就是一个树形结构图。组合体内这些对象都有共同接口,当组合体一个对象的方法被调用执行时,组合设计模式将遍历整个树形结构,寻找同样包含这个方法的对象并实现调用执行。可以用牵一动百来形容。组合设计模式好处:1.使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关心自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。2.更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代码。)

注意:为了简洁,描述上图对象时,均省略掉“PHPUnit2_Framework_”前缀。所以,使用Test作为统一的接口, TestCase是测试用用例,继承于Assert,这样可以方便的调用Assert中的各种断言函数。TestSuite,是一个Test的集合,他可以包含任意的TestCase或TestSuite。这样设计的好处不言而喻——方便的组织测试用例和测试套件,客户代码不必关执行的是单个测试用例还是一整套测试套件或是更为复杂的测试用例树。

使用testsuite管理所有测试用例

有了上面的知识,现在就可以使用TestSuite对象管理和组织你的测试用例了。我们有如下四个测试用例需要组织:

希望将Stack相关的测试一起运行,其他用例一起运行,并且在需要时,所有的用例可以全部运行,那么就创建如下三个测试套件对象。

上面的测试套件只添加Stack相关的测试,运行结果如下:

上面的测试套件只添加其他测试用例,运行结果如下:

如果希望运行所有的套件,可以使用上面的测试套件进行组织,运行结果如下:

通过上面代码中画圈的部分,可以发现一些共性:

1) 测试套件类集成与PHPUnit_Framework_TestSuite类;

2) 测试套件类必须实现public static function suite(){/*必须返回测试套件对象*/}接口;

3) 通过addTestSuite(‘Test Case Class Name’),将具体的测试用例添加到测试套件中。

如果在真实的项目中,可以以模块为单位组织测试套件。如过模块过大,可以在模块内部继续划分测试套件,这样,形成一个树装结构,需要运行那部分测试用例,只需要敲入一行命令“phpunit XXXXTestSuite.php”,就可以轻松执行(上面的代码见附件)。合理的使用测试套件,可以简洁有效的组织所有测试用例。

参考文献

  • PHPUnit官方手册
  • 组合设计模式

转载于:https://www.cnblogs.com/bourneli/archive/2012/04/27/2474005.html

你可能感兴趣的文章
小作文_通知和备忘录
查看>>
06-Windows Server 2012 R2 会话远程桌面-标准部署-RD网关(RemoteApp)
查看>>
Alcatel 7750 常用维护命令
查看>>
mysql AUTO_INCREMENT 字符 删除后重1开始
查看>>
IOS应用从容地崩溃
查看>>
CMS之图片管理(1)
查看>>
vue组件
查看>>
生活热水循环泵选型怎么选,如何选型计算?
查看>>
机器学习中的预测问——回归与分类
查看>>
数据结构 -- 静态链表
查看>>
写的py_ping 可以跑了
查看>>
11月18日站立会议
查看>>
dos 磁盘操作系统
查看>>
数据结构顺序队列打卡
查看>>
Web service调用的安全性
查看>>
C语言测试:想成为嵌入式程序员应知道的0x10个基本问题【转】
查看>>
C#集合
查看>>
ssh 登陆redhat linux时中文显示乱码解决方法
查看>>
【Linux】 静态函数库设计
查看>>
ecshop_2.7.2_flow.php_sql注入漏洞利用工具
查看>>