|
使用单元测试工具
|
|
|
|
敏捷开发思想
首先,编写类定义;
其次,编写测试用例;
第三,实现类;
第四,实现测试用例;
第五,反复测试修改。
准备工作
安装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软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。 |