当前位置:首页 > 公司荣誉 >

PHPUnit单元测试(Lumen框架)指南

PHPUnit单元测试(Lumen框架)指南

使用 PHPUnit 进行单元测试可参看 PHPUnit5.0 手册。由于手册内容较多,刚接触时有些地方不易理解,这里针对 PHPUnit 内容进行通俗的归纳、及关键点的解释,帮助快速入门。

为什么要进行单元测试?

1.帮助理解需求

单元测试应该反映 Use Case,把被测单元当成黑盒测试其外部行为。

2.提高实现质量

单元测试不保证程序做正确的事,但能帮助保证程序正确地做事,从而提高实现质量。

3.测试成本低

相比集成测试、验收测试,单元测试所依赖的外部环境少,自动化程度高,时间短,节约了测试成本。

4.反馈速度快

单元测试提供快速反馈,把bug消灭在开发阶段,减少问题流到集成测试、验收测试和用户,降低了软件质量控制的成本。

5.利于重构

由于有单元测试作为回归测试用例,有助于预防在重构过程中引入 bug。

6.文档作用

单元测试提供了被测单元的使用场景,起到了使用文档的作用。

7.对设计的反馈

一个模块很难进行单元测试通常是不良设计的信号,单元测试可以反过来指导设计出高内聚、低耦合的模块。
经验表明一个尽责的单元测试方法将会在软件开发的某个阶段发现很多的 Bug,并且修改它们的成本也很低。在软件开发的后期阶段,Bug 的发现并修改将会变得更加困难,并要消耗大量的时间和开发费用。无论什么时候作出修改都要进行完整的回归测试,在生命周期中尽早地对软件产品进行测试将使效率和质量得到最好的保证。 在提供了经过测试的单元的情况下,系统集成过程将会大大地简化。开发人员可以将精力集中在单元之间的交互作用和全局的功能实现上,而不是陷入充满很多 Bug 的单元之中不能自拔。

使测试工作的效力发挥到最大化的关键在于选择正确的测试策略,这其中包含了完全的单元测试的概念,以及对测试过程的良好的管理,还有适当地使用象 AdaTEST 和 Cantata 这样的工具来支持测试过程。这些活动可以产生这样的结果:在花费更低的开发费用的情况下得到更稳定的软件。更进一步的好处是简化了维护过程并降低了生命周期的费用。有效的单元测试是推行全局质量文化的一部分,而这种质量文化将会为软件开发者带来无限的商机。

== 环境配置 == === 需求 === PHPUnit 5.0 需要 PHP 5.6。 代码覆盖率分析报告功能需要 Xdebug (2.1.3以上)与 tokenizer 扩展。生成 XML 格式的报告需要有 xmlwriter 扩展。 === 安装 === 安装请使用PHP 档案包 (PHAR)安装,具体过程参见PHPUnit手册: https://phpunit.de/manual/current/zh_cn/installation.html 注:网上很多介绍使用pear安装的PHPUnit的方法现在已失效(2014年失效)。 == Lumen框架中使用PHPUnit == === Lumen框架对PHPUnit的支持 === Lumen 框架对 PHPUnit 提供了非常好的支持与封装,在 Lumen 框架中进行单元测试的操作涉及根目录的 tests 文件夹、 phpunit.xml 及 database 文件夹。 ==== phpunit.xml ==== phpunit.xml 中是对测试环境的配置,下面根据具体配置代码讲解关键点: ./tests ./app/Http/Modules/... ./app/Http/Models ./app/Http/Modules/... =====标签===== 中是测试套件的配置,带有一个或多个 子元素的 元素用于将测试套件及测试用例组合出新的测试套件。 可以用 phpVersion 和 phpVersionOperator 属性来指定 PHP 版本需求。在以下例子中,仅当 PHP版本至少为 5.3.0 时才会将 /path/to/*Test.php 文件与 /path/to/MyTest.php 文件添加到测试套件中。
:suffix=”Test.php” 指明了测试文件的后缀名,因此测试文件必须以 Test.php 结尾,例如 ExampleTest.php ,否则测试文件不会被执行。 /path/to/files /path/to/MyTest.php

=====filter标签=====
filter 标签元素及其子元素用于为代码覆盖率报告配置黑名单 blacklist与白名单 whitelist 。白名单中的文件会产生代码覆盖率报告,当黑名单与白名单冲突时白名单权限更高。

===== 测试数据库入口配置 =====
测试时的数据库入口配置可以通过全局常量 APP_ENV 进行设置,然后在 config 文件夹下的 database.php 中通过全局常量 APP_ENV 跳转相应的数据库连接信息。

*需要注意的是这里的 APP_ENV 的 value 通常取为 ‘testing’ ,这是因为 lumen 对 PHPUnit 进行封装的 TestCase 类中的 refreshApplication() 函数中设置了 putenv(‘APP_ENV=testing’) ,如果需要修改为其他值,需要将两处改为一致的,否则无法正确连接数据库。

protected function refreshApplication() { putenv('APP_ENV=testing'); Facade::clearResolvedInstances(); $this->app = $this->createApplication(); }

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:神农架SEO http://shennongjia.raoyu.net

上一篇:用好促销口号让你事半功倍

下一篇:最后一页