PHPUnit是zend官方大力支持的測試框架,高質量的單元測試時保證項目質量的基礎,能夠有效的減少BUG,改善程序。
安裝PHPUnit:
在php的目錄下:
復制代碼 代碼如下:
pear channel-discover pear;
pear install phpunit/PHPUnit
windows下將php的環境變量加入到PATH環境變量中。
簡單使用:
復制代碼 代碼如下:
<?php
class StackTest extends PHPUnit_Framework_TestCase
{
public function testArray()
{
$stack = array();
$this->assertEquals(0, count($stack));
array_push($stack, 'foo');
$this->assertEquals('foo', $stack[count($stack)-1]);
$this->assertEquals(1, count($stack));
$this->assertEquals('foo', array_pop($stack));
$this->assertEquals(0, count($stack));
}
/**
* @test
*/
public function Stringlen()
{
$str = 'abc';
$this->assertEquals(3, strlen($str));
}
}
從上可以看到編寫PHPUnit的基本規律:
(1)類Class的測試寫在ClassTest中
(2)ClassTest繼承PHPUnit_Framework_TestCase
(3)測試方法都是test*格式,也可以通過@test將其標注為測試方法。
(4)通過斷言方法assertEquals來對實際值和預期值進行斷言。
PHPUnit可以通過PHP擴展和程序庫(PEAE)獲得。PEAR是可重用PHP組件的框架和分發系統。安裝PHPUnit可以通過PEAR安裝程序命令獲得:
pear install PHPUnit2
根據PEAR的版本命名標准,適用於PHP5的PHPUnit包稱為PHPUnit2。PHPUnit是適用於PHP4的包,這在本書後面關於“在PHP4中使用PHPUnit”一章會提到。
安裝只有,能夠在本地的PEAR目錄中找到PHPUnit的源代碼,路徑通常是/usr/lib/ php/PHPUnit2。
盡管使用PEAR安裝程序是PHPUnit唯一支持的安裝方法,但你還是可以手工安裝。要手工安裝,參照以下做法:
1.從pear.php.net/package/PHPUnit2/download下載PHPUnit發布包,然後解壓縮,確保目錄在php.ini定義的include_path中。
2.准備phpunit腳本
a.將pear-phpunit腳本改名為phpunit
b.將腳本中所有的@php_bin@改名為PHP命令行解釋器所在的目錄(通常為/usr/bin/ php)。
c.將此腳本拷貝到一個PATH環境變量所包含的目錄中,並將文件屬性改為可執行(chmod +x phpunit)。
3.將PHPUnit2/ Runner/Version.php腳本中的所有@package_version@字符串替換為你所安裝的PHPUnit版本(如2.3.0)。
解決方法
根據上述出錯信息,我們可以知道PEAR DB類安裝出錯問題所在:是由於在重新安裝PEAR時,沒有更改PEAR的安裝目錄環境變量PHP_PEAR_INSTALL_DIR,導致PEAR命令無法正常使用。
提示告訴我們可以通過修改pear.bat中的PEAR安裝環境變量PHP_PEAR_INSTALL_DIR的值來解決此問題。
右擊pear.bat,選擇編輯,即可以記事本方式打開此批處理文件。找到
REM Check PEAR global ENV, set them if they do not exist
修改下面的
IF “%PHP_PEAR_INSTALL_DIR%”==”" SET “PHP_PEAR_INSTALL_DIR=E:\phpos\DedeAMPZ\WebRoot\Default\pear”
為
IF “%PHP_PEAR_INSTALL_DIR%”==”E:\phpos\DedeAMPZ\Program\PHP5\pear” SET “PHP_PEAR_INSTALL_DIR=E:\phpos\DedeAMPZ\WebRoot\Default\pear”
即可對PEAR安裝環境變量PHP_PEAR_INSTALL_DIR的值進行覆蓋。
至此,PHP PEAR在安裝時由於PHP_PEAR_INSTALL_DIR(安裝目錄)值不對,導致無法使用PEAR的問題就解決了。