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