使用单元测试工具
 

2009-09-08 来源:thinkphp.cn

 
敏捷开发思想

首先,编写类定义;
其次,编写测试用例;
第三,实现类;
第四,实现测试用例;
第五,反复测试修改。

准备工作


安装PHPUnit

自动安装
pear install phpunit

手动安装
下载http://pear.phpunit.de/get/PHPUnit-3.3.9.tgz,解压到PHP目录,

将pear-phpunit和pear-phpunit.bat,复制到PHP目录,重命名为phpunit和phpunit.bat,将PHP目录加入PATH路径。

编辑phpunit,修改为:

编辑phpunit.bat,假设PHP路径为D:\PHP,修改为:
@echo off
php -d safe_mode=Off D:\PHP\phpunit %*

现在在终端运行phpunit,看看命令参数。

单元测试实践

编写类定义

编写测试用例

实现类

实现测试用例

执行测试
phpunit CalculatorTest.php

进阶

一些方法和属性被声明为保护类型,我们在测试无返回值或被保护的方法时,继承就能解决问题。为什么要测试被保护方法?我个人认为由于PHP是一种语法宽松的语言,因而必须进行更严格的测试,要从最底层确保方法的正确性。如果必要的话,也可以测试私有方法。

使用继承来测试被保护方法。

编写总测试套件

编写支测试套件

注意:测试用例这里采用目录名加下划线再加原来的测试用例名,来避免不同目录的同名类冲突问题。

目录结构
Lib
+- Math
   +- Calculator.php
Tests
+- Math
    +- AllTests.php
    +- CalculatorTest.php
|- AllTests.php
|- Configure.php

执行所有测试
phpunit --verbose AllTests.php

备注:phpunit命令可以直接使用不带.php的名称或目录,例如,
phpunit CalculatorTest
phpunit Math
但是这里建议您在每个目录下都写一个测试套件AllTests.php文件,这么做可以为后期测试节省许多时间。因为如果你的项目中有几十个甚至上百个文件或者目录结构很深,将导致PHP脚本超出内存的错误,而且phpunit每次都需要花很长的时间来生成测试套件。

自动化测试

自动生成测试用例
phpunit --skeleton Calculator.php

该命令会生成一个CalculatorTest.php的测试用例,里面有两个未完成的测试方法testAdd()和testMultiply(),你需要完善它。

持续集成

如果你需要与其他项目集成或集成到IDE工具中,使用ant构建是个不错的注意。
编写ant构建文件,让构建、测试、报告、清理一部到位。你可以将下面内容加入你的build.xml文件中。

Windows下请将其中的两处 executable="phpunit" 改为 executable="phpunit.bat"。
使用以下命令执行任务:
ant test 执行测试
ant report 生成测试报告
ant clean 清理测试目录

最佳实践

每次编写好类定义后,自动生成测试用例。实现类和测试用例。修改,执行测试,反复重复这个过程。每次修改后,马上修改测试用例,以免之后忘记。

火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织