庆亮的博客-webgame架构
关注LAMP|PHP源代码分析|web架构|PHP扩展|Erlang|服务端架构
关注LAMP|PHP源代码分析|web架构|PHP扩展|Erlang|服务端架构
十 14th
Php的测试驱动开发闻之已久,却从来没有试用过,今天又看到相关的介绍,就花了点时间简单的看了下. 以下为从官方实例翻译过的来笔记:
从一个案例开始
通常我们在测试我们的php程序时,会使用诸如print,echo等语句来输出一些结果,以查看我们的程序是否正常或者哪里出错.例如:
<?php
$array = array();
print sizeof($array);
array_push($array, ‘newElement’);
print sizeof($array);
结果
0
1
这样我们就知道$array变量是我们预期的结果.现在我们希望能够直观给出测试的结果,而不是看到0, 1这样的结果后再去判断. 我们修改测试代码:
<?php
$array = array();
print (sizeof($array) == 0) ? "OK\n" : "Not Ok\n";
array_push($array, ‘newElement’);
print (sizeof($array) == 1) ? "OK\n" : "Not Ok\n";
结果
OK
OK
为了方便重用及修改我们将测试代码的断言部分置于函数中
<?php
$array = array();
assertTrue(sizeof($array) == 0);
array_push($array, ‘newElement’);
assertTrue(sizeof($array) == 1);
function assertTrue($condition)
{
if (!$condition)
throw new Exception(‘Assertion Failed!’);
}
如此我们就可以简单的实现测试的自动化了.
自动测试的目的是减少错误,使用自动测试你能够明显发现你的代码的错误的减少.还有一些其他的好处……PHPUnit的目标就是如此.那么我们开始我们的PHP Unit Test吧.
一. 安装PHPUnit需要使用Pear Installer安装, 加入phpunit频道到pear寻找频道
D:\wamp\bin\php\php5.2.6>pear channel-discover pear.phpunit.de
Adding Channel "pear.phpunit.de" succeeded
Discovery of channel "pear.phpunit.de" succeeded
安装PHPUnit
D:\wamp\bin\php\php5.2.6>pear install phpunit/PHPUnit
Did not download optional dependencies: pear/Image_GraphViz, pear/Log, use –all
deps to download automatically
phpunit/PHPUnit can optionally use package "pear/Image_GraphViz" (version >= 1.2
.1)
phpunit/PHPUnit can optionally use package "pear/Log"
phpunit/PHPUnit can optionally use PHP extension "pdo_sqlite"
phpunit/PHPUnit can optionally use PHP extension "xdebug" (version >= 2.0.0)
downloading PHPUnit-3.3.4.tgz …
Starting to download PHPUnit-3.3.4.tgz (268,962 bytes)
………………………………………………..done: 268,962 bytes
install ok: channel://pear.phpunit.de/PHPUnit-3.3.4
安装成功,在pear路径下即可看到PHPUnit文件夹,所有PHPUnit源码都在其中.
成功安装之后,会在PHP主目录下生成一个PHPUnit.bat的文件, 这样我们编写测试用例之后可以在命名行下使用如下的语法即可自动进行测试:
> PHPUnit test_begin.php
test_begin.php为包含了测试用例的文件
对每个测试,PHPUnit命令行测试工具打印一个字符表示进程:
测试成功打印“.”。
运行测试方法发生了断言失败打印“F”。
运行测试方法发生了错误打印“E”。
二. 开始一个简单的示例
对于刚刚在开始中的示例(测试数组大小),我们可以使用PHPUnit来编写自动化测试代码了:
<?php
//filename: test_begin.php
require_once(‘PHPUnit/Framework.php’);
class ArrayTest extends PHPUnit_Framework_TestCase
{
public function testNewArrayIsEmpty()
{
// 定义一个数组变量
$fixture = array();
// 断言数组的大小为0.
$this->assertEquals(0, sizeof($fixture));
}
public function testArrayContainsAnElement()
{
// 定义一个数组变量
$fixture = array();
// 为数组变量增加一个元素
$fixture[] = ‘Element’;
// 断言该数组大小为1
$this->assertEquals(1, sizeof($fixture));
}
}
> PHPUnit test_begin.php
结果:
PHPUnit 3.3.4 by Sebastian Bergmann.
..
Time: 0 seconds
OK (2 tests, 2 assertions)
.. 表示两次测试成功
这个例子显示了使用PHPUnit编写测试用例的基本步骤:
1. 测试类名为ClassTest,其中Class为你的对象名
2. 测试类ClassTest通常派生自PHPUnit_Framework_TestCase
3. 测试通常是一些名称为test*的公共方法. 另一种方法是, 你可以在方法的注释说明中使用@test 标记来表明这是一个测试方法.
4. 诸如assertEquals之类的方法用以测试一个实际值同预想值是否相对.
一个测试方法可以接受任何的参数(任意类型和数量), 参数通过provider()方法来提供,或者同测试方法一下,使用@dataProvider注释标记来标明.关于provider()的返回参数也有一定要求: 要么是数组(每个数据作为一个参数, 数组中可以包含多组参数), 要么是实现了Iterator接口的对象
<?php
class DataTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider provider
*/
public function testAdd($a, $b, $c)
{
$this->assertEquals($c, $a + $b);
}
public function provider()
{
return array(
array(0, 0, 0),
array(0, 1, 1),
array(1, 0, 1),
array(1, 1, 3)
);
}
}
?>
结果:
PHPUnit 3.3.4 by Sebastian Bergmann.
…F
Time: 0 seconds
There was 1 failure:
1) testAdd(DataTest) with data set #3 (1, 1, 3)
Failed asserting that matches expected value .
D:\wamp\www\Test\php\unittest\data_provider.php:9
FAILURES!
Tests: 4, Assertions: 4, Failures: 1.
…F 表示三个测试成功,一次测试失败.
到此就可以简单的使用PHPUnit了,当然PHPUnit的功能远不止此,测试人员应该好好学习一下.
四 27th
/**
*
* @version $Id: upload.class.php,v 1.4 2007/04/27 00:52 xm.zhuge Exp $
* @copyright (c) 2007 Nandou Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*/
*优化了结果信息提示
*更改了默认构造函数的实现,方便参数传递
+增加文件保存路径统计,文件上传数目统计
四 25th
upload.class.package.php 1.2.0(文件上传组件)
/**
*
* @package NdPhp
* @version $Id: upload.class.package.php ,v 1.2.0 2007/04/25 11:45:24 xm.zhuge Exp $
* @copyright (c) 2007 Nandou Studio
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*/
+多文件上传表单生成
+多文件上传处理
+取消最终结果自动输出,方便同模板结合输出
*重命名文件名修正
……
四 12th
NdUpload套件包含两个文件:NdUpload.php和NdUploadForm.php,分别是文件上传类和表单生成类。
更新日志:
2007-04-11 20:40 , v 1.0.1
*改进了文件类型识别方式
四 10th
——————————————————————————–
系统环境:Windows XP SP2 + php 5.2.1 + mysql 5.0 + Apache 2.2.24
开发环境:Zend Studio 5.5
参数: safe_mode = Off
error_reporting = E_ALL & ~E_NOTICE
register_globals =Off
magic_quotes_runtime = Off
——————————————————————————–
更多 >
四 6th
代码如下, 功能比较简单。
——————————————————————————–
系统环境:Windows XP SP2 + php 5.2.1 + mysql 5.0 + Apache 2.2.24
开发环境:Zend Studio 5.5
参数: safe_mode = Off
error_reporting = E_ALL & ~E_NOTICE
register_globals =Off
magic_quotes_runtime = Off
——————————————————————————–
更多 >
一 14th
这段代码相信熟悉php的朋友大概都比较熟悉,但是我使用的时候却发现这段代码并没有被执行而是直接打印出来了,检查了一下其他地方没有错误。实在郁闷。去网上找资料,呵呵,看到一句话:EOT 自定义分界符,结束时必须位于行首 。呵呵,原来要求一定要在一行的开始,没想到保持代码风格反而引出了一个小问题。 最后更新: 2009-05-07
最近评论