使用PHPUnit和XDebug进行PHP代码测试(1):摘要、引言、安装

摘要

本文主要分享使用PHPUnit和XDebug,通过单元测试(UnitTest)和代码覆盖度测试(Code Coverage Test)来测试PHP代码。

番外篇将阐述个人在进行TDD(Test-driven development)时没有使用常规流程的原因,和一些对TDD的不解和吐槽,以供大家讨论和批判。

本文阅读对象主要为php开发,但其他IT从业/爱好者也可阅读。为照顾没有接触过相关概念的开发者,部分地方比较啰嗦,可放心跳过。

本文长期挖坑,不定期更新。

—————————————————————————————————————————————————————————–

名词解释:

TDD:Test-driven development的缩写,即测试驱动开发。一般流程是先编写测试用例,然后编写代码(可以为最小可用代码)使之运行通过,以此为基础进行的循环测试-开发过程。代码重构或扩充均需要用测试用例来保障。

——————————————————————————————————————————————————————————

引言

小明是一名php程序猿,每天的工作是在光滑的键盘上摩擦摩擦,屏幕上就会出现各种代码以满足客户需求。有一天他在某个Github仓库中,见到一个tests文件夹。虽然他曾经听过单元测试之类的概念,但真正接触是第一次。随便点开一看,大惊:丧心病狂啊这也要测试?不浪费时间吗?!

(如非特别指出,本文所有代码均为UTF-8无BOM编码格式)

为了确定这个问题,小明踏上了测试之路。

小明:小吉,在不?帮我看看这个库的tests文件夹,要用啥才能运行?
小吉:(一番查看后)嗯,应该可以用PHPUnit和XDebug,然后在php命令行模式下(下称“php cli模式”)运行。好像我有一份安装笔记,你等等。

不一会,小明收到了下面这份安装笔记。

(此处假设开发者使用Windows平台、php安装在C:\php5.4、并且该目录已经加入PATH环境变量,这样就可以在命令行直接输入“php”而不是“C:\php5.4\php.exe”。PATH环境变量修改方法见:http://blog.chinaunix.net/uid-25810793-id-3257898.html

安装XDebug

XDebug扩展的源码和dll均可从XDebug官网(http://xdebug.org/download.php )或pecl(http://pecl.php.net/package/xdebug )。下载完成后,在php.ini加入如下文字:

zend_extension=php_xdebug.dll的绝对路径(注意,不能是相对路径,必须完整,比如:C:\php5.4\ext\php_xdebug.dll )

注意:在windows平台下,请注意XDebug必须和php版本对应(版本号、vc编译器、线程安全性)。

安装PHPUnit

PHPUnit有两种常见安装方法:单一phar包安装,composer源码安装。完整的方法可参阅文档:https://phpunit.de/getting-started.html 。此处仅摘录Windows安装的要点。

———————————————————————————————-
(题外话:pear的幽怨)
pear:你为什么抛弃我?(pear安装方法将于2014年12月31日关闭)
PHPUnit:怪我咯。
—————————————————————————————————

 

单一phar包安装phpunit

1、下载https://phar.phpunit.de/phpunit.phar 到一个目录,此处假设为C:\php_phar。

2、运行命令:

php “C:\php_phar\phpunit.phar” –version

看到版本输出就表示安装成功了,so easy。

composer源码安装phpunit

1、安装composer。

官方安装方法见:https://getcomposer.org/doc/00-intro.md#installation-windows 。另外,也以下假设命令行能直接运行composer,如果不能,可参考本人之前编写的《windows下安装composer方法(不修改PATH环境变量)》:http://www.iirr.info/blog/?p=1468

2、到https://github.com/sebastianbergmann/phpunit ,选择你想要的branch(以下假设为4.4),然后点击Download ZIP,得到一个zip包。

3、解压缩到指定目录,以下假设为R:\phpunit。

4、打开命令行,转到R:\phpunit,然后运行:

composer install

composer-install-phpunit-source

5、运行命令:

php R:\phpunit\phpunit –version

看到版本输出就表示源代码安装成功。

题外话:处女座或强迫症使用PHPUnit必读:如何更快捷地使用PHPUnit

问题1:要输入这么长的phpunit路径,不能忍!(我想直接输入“phpunit”运行怎么办?)

答1:可以在PHPUnit的文件夹下建立一个phpunit.bat文件,内容如下:

(如果是phpunit.phar)

(如果是源代码安装PHPUnit)

以后就可以这样运行命令:

[PHPUnit目录]\phpunit –version

你甚至可以将PHPUnit目录加入到PATH环境变量,这样命令就可以缩为:

phpunit –version

问题2:运行PHPUnit时总会输出一些乱码(红框所示),不能忍!

phpunit-cmd

答2:Cygwin可以帮到你。

下载地址:http://www.cygwin.com/ 。安装方法很简单的,不懂的你一路next就行了。

安装之后再在Cygwin运行——妈妈我强迫症治好了。

phpunit-cygwin

什么?你想知道原因?其实,是因为PHPUnit会使用Unix Shell的显示颜色代码进行输出,但Windows的颜色代码不是这样子的嘛,所以cmd或者PowerShell就只会原样输出,外表看上去颇似乱码。而Cygwin是一款UNIX shell环境模拟软件,所以可以正常显示了。

PS:Git For Windows附赠的Git Bash(其实就是MinGW)不知道为什么没有这效果,故此处不介绍了。对了,Git Bash有一个令处女座不能忍的事情——无法右键,解决方法在此不用谢:http://stackoverflow.com/questions/16363890/unable-to-copy-paste-in-mingw-shell

PPS:Cygwin使用要点

(1)Cygwin默认不接受反斜杠的Windows路径。若要使用,请将反斜杠换成斜杠,同时建议双引号包含。比如:

“C:/php5.4/php.exe” -f “R:/phptest.php”

(2)Cygwin没有命令行式的包管理(yum、apt-get之类的),所以要添加、升级或者删除包时,直接运行安装程序即可,然后在“安装路径”和“包下载路径”选择回原有路径即可——一般来讲,Cygwin安装程序会自动读取以前的配置,所以一般直接next就行。

(3)你完全可以将Cygwin当作一个独立的命令行运行工具,在不想污染Windows全局PATH环境变量的情况下想增加多少路径就增加多少路径,还可以通过定制别名(alias,相当于windows命令行的DOSKEY)快速执行命令行。

该方法需要修改文件“[Cygwin安装目录,一般为C:\cygwin64]\home\[当前Windows登录的用户名]\.bash_profile”。其中PATH的重新定义如下,只能有一行:

export PATH=$PATH:[新的PATH,使用半角冒号隔开,比如/cygdrive/c/nodejs/bin:/cygdrive/c/Git/bin]

alias定义事例请参阅stackoverflow的答案,可以多行:http://stackoverflow.com/questions/2266661/cygwin-and-phpunit-could-not-open-input-file-cygdrive-c-xampp-php-phpunit
(第一部分完)

[via@在逝世前陷入悲痛:理解预期性悲伤(anticipatory grief)]