文档章节

PHPUnit的实际应用

xsctx7788
 xsctx7788
发布于 2017/07/18 10:15
字数 1119
阅读 46
收藏 0
PHP

最近研究的了一下php的单元测试,使用的测试工具是phpunit,下面来分享一下我的经验。

  • 首先要说为什么要用单元测试

很多人以为写代码写完没bug能运行就行了

没bug

其实不是,我们写代码是为了什么,肯定是为了能够重复运行。通过良好的API设计分割需求,那么在重构的时候API就基本不用变化,测试文件也不用重写。那么在以后重构的时候,只要unit test覆盖的够好,基本跑一遍就知道有没有改成傻逼。可以节省大量的时间。

异常

  • 代码覆盖

这里提到了一个词,代码覆盖。在单元测试的时候我们经常通过代码覆盖率来判断模块是否测试的完整。那么什么是代码覆盖率呢?覆盖率通常作为一个参考值来反应应用的质量。覆盖率反应测试脚本对应用的覆盖情况。以单元测试覆盖率为例,通过一定的工具比如emma(针对java应用),可以看到这些单测case对于应用的类覆盖,行覆盖,方法覆盖,块覆盖(可以理解为分支覆盖)情况。通过不断提升覆盖率的值,对于关键功能或者代码路径的覆盖,能够有效的保证应用迭代过程中,应用的质量。下面是一段针对php的单元测试代码覆盖率报告图片(绿色为测试覆盖到的代码,红色的代表没有覆盖到)。

1

  • 安装

首先肯定是安装测试工具,这里我使用的是windows系统。先去官网上找到对应的phpunit版本下载,目前官网首页上有三个版本提供下载

 

这里一定要先确认本地的php项目的版本,比如我的环境是PHP5.5的,但是我第一次安装时装的是PHPunit5.7版本,结果导致按照教程测试的时候一直提示语法错误。3

 

下载完成后可以按照官方手册的指导进行安装,这里放上PHPunit4.8版本的地址

  • 代码内容

整体逻辑来说,使用PHPunit一共分为两个文件夹,即功能文件夹和测试文件夹。

 

举例来说。首先是要测试的功能模块文件,如图所示是adt_coupon.php文件

然后是测试文件adt_couponTest.php

在这里可以看到,我定义的类NameTest在继承phpunit自带函数的时候,在前面加了一个反斜杠”\”,这是在4.8版本中的写法,和新版中的写法有所不同。同时,在我们的功能文件中所需要获取的传入的参数,如$_REQUST[‘member_name’]等,我们可以在测试文件中使用phpunit自带的setup方法,在其中定义。

在index.php里,主要放的是我们需要用到的一些引用文件路径

index

autoload.php是我们在执行自动化单元测试时的主要文件,在adt_couponTest中调用的一些方法,我们需要在这里进行生声明

这样最基本的单元测试内容就完成了。

  • 使用

使用PHPunit测试,首先要通过命令行的形式进入到之前所说的主目录,如图

命令行地址

之后执行自动测试命令就可以了

phpunit –bootstrap mobile/control/autoload.php test/tests

这里可以看到命令分为四部分,第一部分是phpunit,第二部分是–bootstrap,这两部分是不变的,第三部分是mobile/control/autoload.php,这里是要指明autoload.php文件所在的路径,第四部分是测试文件所在的路径

  • 常见问题

  1. 在执行测试后,如果返回的是如——Class Error: xsctx\agg\language.isn’t exists!,这种问题,说明没有把需要调用的函数加进到命名空间中去,这时我们要找到调用函数所在的文件,然后在头部把自己定义的命名空间加上。
  2. 在执行测试后,如果返回的是如——Fatal error: Class ‘Language’ not found in F:\BaiduYunDownload\111\server-php\core\framework\function\core.php on line 123 ,说明缺少引用文件。
  3. 在执行测试后,如果返回的是如——Fatal error: Call to undefined function C,也是缺少引用文件。

有兴趣的可以参考微软MVP写的一篇文章进行学习 30天快速上手TDD

© 著作权归作者所有

xsctx7788
粉丝 1
博文 29
码字总数 18797
作品 0
苏州
程序员
私信 提问
PHPUnit 6.0.0 正式版发布,PHP 单元测试框架

PHPUnit 开发团队宣布 PHPUnit 6.0.0 发布了。此版本添加了新功能,更改并删除了现有功能,并修复了错误。此处提供了详细的更改列表。 Dropping support for PHP 5.6 According to our rele...

michealz
2017/02/09
1K
7
windows下安装pear和PHPUnit

想安装phpunit那么就要安装pear,网上说在php安装目录中找到go-pear.bat然后双击,但是很扯的是我的安装目录中真的没有,那么咋办捏。。继续问度娘,原来还真有和我一样的。参考这里的安装成...

王纪光
2013/11/30
3.5K
0
使用 PHPUnit 进行 PHP 的单元测试

PHPUnit是一个用PHP编程语言开发的开源软件,是一个单元测试框架。PHPUnit由Sebastian Bergmann创建,源于Kent Beck的SUnit,是xUnit家族的框架之一。本文将探索PHPUnit,特别介绍自动化单元...

oschina
2013/05/30
42.1K
18
PHPUnit 入门篇

PHPUnit是什么? 它是一款轻量级的php测试框架 为什么要用PHPUnit? 1. facebook在用 2. 可以通过命令操控测试脚本 3. 可以测试性能 4. 可以测试代码覆盖率 5. 可以自动化的更新测试用例的参...

鉴客
2011/11/30
2.5K
1
phpunit+selenium用xml套件执行报错

我用phpunit -c phpuint_Auto.xml 执行时报如下错误: Fatal error: Cannot redeclare class PHPUnit_Extensions_SeleniumTestCase in C:\xampp\php\pear\PHPUnit\Extensions\SeleniumTestCa......

冰丸子
2014/12/09
234
0

没有更多内容

加载失败,请刷新页面

加载更多

让《强化学习(第2版)》架起一座通往强化学习经典知识宝库的桥梁

上交大计算科学与工程系俞凯教授,5分钟口述讲解,带你快速认识了解年度重磅图书《强化学习(第二版)》! 在 AlphaGo战胜李世石之后,AlphaZero以其完全凭借自我学习超越人类在各种棋类游戏...

博文视点Bv
18分钟前
6
0
TLA7-EVM开发板的处理器、NOR FLASH、DDR3

TLA7-EVM开发板是一款由广州创龙基于Xilinx Artix-7系列FPGA自主研发的核心板+底板方式的开发板,可快速评估FPGA性能。核心板尺寸仅70mm*50mm,底板采用沉金无铅工艺的6层板设计,专业的PCB...

Tronlong创龙
27分钟前
4
0
UUID的变种-有序

为了解决UUID无序的问题,NHibernate在其主键生成方式中提供了Comb算法(combined guid/timestamp)。保留GUID的10个字节,用另6个字节表示GUID生成的时间(DateTime)。 /// <summary> //...

Canaan_
28分钟前
4
0
Netty学习(6)——通道间数据传输

1. FileChannel实现通道间的数据传输 在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel传输到另外一个channel。 transferFrom() FileChannel的transferF...

江左煤郎
31分钟前
3
0
AngularDOM操作

gtandsn
32分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部