當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 江西OA系統(tǒng) > 鷹潭OA > 鷹潭網(wǎng)站建設(shè)公司
PHPUnit
你能否在順序開發(fā)的過程中遇到以下的狀況:當(dāng)你花了很長的工夫開發(fā)一個PHP應(yīng)用后,你以為應(yīng)該是功德圓滿了,惋惜在調(diào)試的時分,老是不斷的發(fā)現(xiàn)bug,而且最可怕的是,這些bug是重復(fù)呈現(xiàn)的,你能夠發(fā)現(xiàn)這些bug之間會有相關(guān),但卻老是找不到問題的地點。
當(dāng)你遇到以上這些令你懊喪的狀況時,你必定會想能有什么更好的辦法去處理呢?辦法當(dāng)然是有的!這就是運用單元測驗。單元測驗不光可以在必定程度上處理上述頭疼的問題,而且能讓代碼變的簡略保護,還可以能讓你更多地對代碼進行重構(gòu)。
一旦你編寫好單元測驗用例,當(dāng)你需求修正你的代碼時,你要做的任務(wù)就是從頭運轉(zhuǎn)你的單元測驗用例并調(diào)查這些單元測驗用例能否經(jīng)過,若是經(jīng)過了的話,證明代碼是沒問題的。
大家往往會說:已然單元測驗這么好,為什么那么多人仍是不大情愿去寫單元測驗?zāi)?有以下幾種了解上的誤曲:
1、以為編寫單元測驗太浪費工夫。固然當(dāng)前許多IDE東西都為編寫單元測驗樹立好了結(jié)構(gòu),但仍是要開發(fā)者編寫一些單元測驗的代碼的。就象許多開發(fā)中的最佳理論相同,用正確的辦法去做正確的任務(wù)會為開發(fā)節(jié)約許多的工夫。每逢新添加新功用時,你能夠經(jīng)過拜訪你的網(wǎng)頁處處去點擊手動測驗,而運轉(zhuǎn)樹立好的單元測驗用例其速度其實比經(jīng)過手藝去測驗的速度更快。
2、以為已然代碼能運轉(zhuǎn)了,不需求再編寫單元測驗。但假定團隊中有新的成員,若是沒有杰出的單元測驗用例,新成員很有能夠隨意地去編碼而不思索各種成果。若是有編寫杰出的單元測驗,在順序運轉(zhuǎn)時進行各種測驗,則能最大程度防止bug的發(fā)生。
3、以為編寫單元測驗代碼單調(diào)無味。順序員的天分是處理問題,而許多順序員以為在嚴(yán)重的編碼任務(wù)時,還要編寫單元測驗代碼,會很單調(diào)。但要曉得的是,若是能經(jīng)過編寫單元測驗在很早的段落就能盡能夠發(fā)現(xiàn)代碼中多的過錯的話,那么既節(jié)約工夫減少了犯錯,何樂而不為?
開端著手裝置PHPUnit
本文中將經(jīng)過引見PHP中的單元測驗利器PHPUnit(http://phpunit.de/),并經(jīng)過實踐比方來解說如安在實踐任務(wù)中運用PHPUnit。首要裝置PHPUnit的辦法可以經(jīng)過PHP下的pear去裝置:
pear channel-discover pear.phpunit.de
pear channel-discover components.ez.no
pear channel-discover pear.symfony-project.com
pear install phpunit/PHPUnit
若是你想經(jīng)過手動辦法去裝置,可以參閱PHPUnit的手冊去裝置(http://www.phpunit.de/manual/3.0/en/installation.html)。
編寫第一個單元測驗用例
下面咱們開端編寫第一個單元測驗用例。在編寫測驗用例時,要恪守如下的PHPUnit的規(guī)矩:
1 普通地,在測驗用例中,可以擴大PHPUnit_Framework_TestCase類,這樣就可以運用象setUp(),tearDown()等辦法了。
2 測驗用例的姓名最棒是運用約定俗成的格局,即在被測驗類的后邊加上”Test”,比方要測驗的類為RemoteConnect,則測驗用例的命名為RemoteConnectTest。
3 在一個測驗用例中的一切的測驗辦法,在命名時都應(yīng)該以test+測驗辦法名去命名,如testDoesLikeWaffles(),要注意的是該辦法必須是聲明為public類型的。當(dāng)然可以在你的測驗用例中包括private的辦法,但它們不能被phpunit所調(diào)用。
4 測驗辦法中是不能接納參數(shù)的。
下面首要舉個簡略的比方,代碼如下:
class RemoteConnect
{
public function connectToServer($serverName=null)
{
if($serverName==null){
throw new Exception(“That's not a server name!”);
}
$fp = fsockopen($serverName,80);
return ($fp) ? true : false;
}
public function returnSampleObject()
{
return $this;
}
}
?>
面的代碼其實是完結(jié)連接到一個指定的服務(wù)器的功用,那么咱們可以編寫測驗代碼如下:
require_once('RemoteConnect.php');
class RemoteConnectTest extends PHPUnit_Framework_TestCase
{
public function setUp(){ }
public function tearDown(){ }
public function testConnectionIsValid()
{
// test to ensure that the object from an fsockopen is valid
$connObj = new RemoteConnect();
$serverName = 'www.google.com';
$this->assertTrue($connObj->connectToServer($serverName) !== false);
}
}
?>
在上面的代碼中,由于承繼了PHPUnit_Framework_TestCase類,因此在setUp和tearDown辦法中,不需求編寫任何代碼。SetUp辦法是在每個測驗用例運轉(zhuǎn)前進行一些初始化的任務(wù),而tearDown則在每個測驗用例運轉(zhuǎn)后進行一些比方資源的開釋等任務(wù)。在測驗辦法中,經(jīng)過運用PHPUnit的斷語assertTrue去判別所回來的布爾值能否為真,這里是經(jīng)過調(diào)用RemoteConnect.php中的connectToServe辦法去判別能否連接上服務(wù)器。
接下來咱們運轉(zhuǎn)這個單元測驗,在命令行下輸入代碼:
phpunit /path/to/tests/RemoteConnectTest.php即可,可以看到測驗順暢經(jīng)過的話,會輸出以下成果:
PHPUnit 3.4 by Sebastian Bergmann
.
Time: 1 second
Tests: 1, Assertions: 1, Failures 0
可以看到,上面是經(jīng)過了測驗。默許狀況下,PHPUnit是會運轉(zhuǎn)測驗用例中的一切測驗辦法的。下面再引見下PHPUnit中相關(guān)的幾個斷語:
AssertTrue/AssertFalse 斷語能否為真值仍是假
AssertEquals 判別輸出能否和預(yù)期的持平
AssertGreaterThan 斷語成果能否大于某個值,相同的也有LessThan(小于),GreaterThanOrEqual(大于等于),
LessThanOrEqual(小于等于).
AssertContains 判別輸入能否包括指定的值
AssertType 判別能否歸于指定類型
AssertNull 判別能否為空值
AssertFileExists 判別文件能否存在
AssertRegExp 依據(jù)正則表達式判別
舉個比方來闡明下比方AssertType的運用,仍然以上面的比方來說,可以用AssertType去判別returnSampleObject回來的對象實例能否為remoteConnect,代碼如下:
function testIsRightObject() {
$connObj = new RemoteConnect();
$returnedObject = $connObj->returnSampleObject();
$this->assertType('remoteConnect', $returnedObject);
}
?>
當(dāng)前PHP結(jié)構(gòu)對單元測驗的撐持
當(dāng)前許多優(yōu)異的PHP結(jié)構(gòu)(如Zend Framework,Symfony等),都供給了對單元測驗很好的撐持。以Zend Framework為例,闡明下其間是如何運轉(zhuǎn)單元測驗的。
class CommentControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
public function setUp()
{
parent::setUp();
}
public function tearDown()
{
parent::tearDown();
}
public function appBootstrap()
{
$this->frontController->registerPlugin(new Initializer('test'));
}
public function testGoHome()
{
$this->dispatch('/home');
$this->assertController('home');
}
}
?>
以上代碼其實是對Zend自身的結(jié)構(gòu)進行了一個單元測驗罷了,可以看到,在Zend中,是經(jīng)過承繼Zend_Test_PHPUnit_ControllerTestCase去對Zend的controller去進行單元測驗的,可以看到,在zend中的單元測驗跟PHPUnit中的差不多,但添加了別的一些新的斷語,比方上面的assertController,詳細的可以參閱Zend的參閱手冊。
PHPUnit是一個輕量級的PHP測驗結(jié)構(gòu)。它是在PHP5下面臨JUnit3系列版別的完好移植,是xUnit測驗結(jié)構(gòu)宗族的一員(它們都根據(jù)形式前鋒Kent Beck的描繪)。
單元測驗是幾個現(xiàn)代靈敏開發(fā)辦法的根底,使得PHPUnit成為許多大型PHP項意圖要害東西。這個東西也可以被Xdebug擴大用來生成代碼覆蓋率陳述 ,而且可以與phing集成來自動測驗,最終它還可以和Selenium整合來完結(jié)大型的自動化集成測驗。
- 1二維碼是網(wǎng)站建設(shè)推廣和發(fā)展的雙刃劍
- 2企業(yè)為什么偏愛要求資深的網(wǎng)站維護單位做網(wǎng)站呢?
- 3PHP與XML聯(lián)手進行網(wǎng)站編程
- 4泛普軟件-U2ME網(wǎng)站設(shè)計方案計劃表
- 5網(wǎng)站建設(shè)和營銷帶來的經(jīng)濟效益
- 6 企業(yè)四網(wǎng)合一網(wǎng)站升級版3
- 7網(wǎng)站備案所需材料
- 8ecshop中jQuery沖突解決
- 9如何讓搜索引擎看到更真實的網(wǎng)頁
- 10網(wǎng)站建設(shè)何以做到內(nèi)容豐富
- 11PHP 5中垃圾回收算法的演化
- 12如何讓您的網(wǎng)站盈利中發(fā)揮到極致
- 13Linux系統(tǒng)平安Shell劇本用于Linux系統(tǒng)的平安初始化劇本
- 14Android訪問php取回json數(shù)據(jù)
- 15房地產(chǎn)行業(yè)微信營銷方案3
- 16網(wǎng)站優(yōu)化企業(yè)的方法
- 17關(guān)于PHP防CC攻擊
- 18Linux操作系統(tǒng)中用PHP構(gòu)建網(wǎng)站詳解
- 19玩具租賃商城系統(tǒng)需求1
- 20企業(yè)建站要寫簡潔的代碼
- 21介紹如何使用你的JavaScript
- 22玩具租賃商城系統(tǒng)需求3
- 23如何讓企業(yè)網(wǎng)站發(fā)揮到機極致
- 24考證輔導(dǎo)網(wǎng)站制作解決方案
- 25閱讀PHP驗證碼工具-Securimage
- 26JavaScript 性能提升技巧
- 27久途-網(wǎng)站制作流程
- 28企業(yè)為什么偏愛需要資深的網(wǎng)站設(shè)計企業(yè)做官方網(wǎng)站呢?
- 29MySql常用命令總結(jié)
- 30網(wǎng)站制作絕對不可以犯的編程錯誤2
成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓