您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“PHP中PHPUnit的安裝和用法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“PHP中PHPUnit的安裝和用法”吧!
開始動(dòng)手安裝PHPUnit
本文中將通過介紹PHP中的單元測試?yán)鱌HPUnit(http://phpunit.de/),并通過實(shí)際例子來講解如何在實(shí)際工作中運(yùn)用PHPUnit。首先安裝PHPUnit的方法可以通過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
如果你想通過手動(dòng)方式去安裝,可以參考PHPUnit的手冊去安裝(http://www.phpunit.de/manual/3.0/en/installation.html)。
編寫***個(gè)單元測試用例
下面我們開始編寫***個(gè)單元測試用例。在編寫測試用例時(shí),要遵守如下的PHPUnit的規(guī)則:
1 一般地,在測試用例中,可以擴(kuò)展PHPUnit_Framework_TestCase類,這樣就可以使用象setUp(),tearDown()等方法了。
2 測試用例的名字***是使用約定俗成的格式,即在被測試類的后面加上”Test”,比如要測試的類為RemoteConnect,則測試用例的命名為RemoteConnectTest。
3 在一個(gè)測試用例中的所有的測試方法,在命名時(shí)都應(yīng)該以test+測試方法名去命名,如testDoesLikeWaffles(),要注意的是該方法必須是聲明為public類型的。當(dāng)然可以在你的測試用例中包含private的方法,但它們不能被phpunit所調(diào)用。
4 測試方法中是不能接收參數(shù)的。
下面首先舉個(gè)簡單的例子,代碼如下:
<?php 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í)是實(shí)現(xiàn)連接到一個(gè)指定的服務(wù)器的功能,那么我們可以編寫測試代碼如下:
<?php 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方法是在每個(gè)測試用例運(yùn)行前進(jìn)行一些初始化的工作,而tearDown則在每個(gè)測試用例運(yùn)行后進(jìn)行一些比如資源的釋放等工作。在測試方法中,通過使用PHPUnit的斷言assertTrue去判斷所返回的布爾值是否為真,這里是通過調(diào)用RemoteConnect.php中的connectToServe方法去判斷能否連接上服務(wù)器。
接下來我們運(yùn)行這個(gè)單元測試,在命令行下輸入代碼:
phpunit /path/to/tests/RemoteConnectTest.php即可,可以看到測試順利通過的話,會輸出以下結(jié)果:
PHPUnit 3.4 by Sebastian Bergmann . Time: 1 second Tests: 1, Assertions: 1, Failures 0
可以看到,上面是通過了測試。默認(rèn)情況下,PHPUnit是會運(yùn)行測試用例中的所有測試方法的。下面再介紹下PHPUnit中相關(guān)的幾個(gè)斷言:
AssertTrue/AssertFalse 斷言是否為真值還是假 AssertEquals 判斷輸出是否和預(yù)期的相等 AssertGreaterThan 斷言結(jié)果是否大于某個(gè)值,同樣的也有LessThan(小于),GreaterThanOrEqual(大于等于), LessThanOrEqual(小于等于). AssertContains 判斷輸入是否包含指定的值 AssertType 判斷是否屬于指定類型 AssertNull 判斷是否為空值 AssertFileExists 判斷文件是否存在 AssertRegExp 根據(jù)正則表達(dá)式判斷
舉個(gè)例子來說明下比如AssertType的使用,依然以上面的例子來說,可以用AssertType去判斷returnSampleObject返回的對象實(shí)例是否為remoteConnect,代碼如下:
<?php function testIsRightObject() { $connObj = new RemoteConnect(); $returnedObject = $connObj->returnSampleObject(); $this->assertType('remoteConnect', $returnedObject); } ?>
目前PHP框架對單元測試的支持
目前很多優(yōu)秀的PHP框架(如Zend Framework,Symfony等),都提供了對單元測試很好的支持。以Zend Framework為例,說明下其中是如何運(yùn)行單元測試的。
<?php 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í)是對Zend本身的框架進(jìn)行了一個(gè)單元測試而已,可以看到,在Zend中,是通過繼承Zend_Test_PHPUnit_ControllerTestCase去對Zend的controller去進(jìn)行單元測試的,可以看到,在zend中的單元測試跟PHPUnit中的差不多,但增加了另外一些新的斷言,比如上面的assertController,具體的可以參考Zend的參考手冊。
PHPUnit是一個(gè)輕量級的PHP測試框架。它是在PHP5下面對JUnit3系列版本的完整移植,是xUnit測試框架家族的一員(它們都基于模式先鋒Kent Beck的設(shè)計(jì))。
單元測試是幾個(gè)現(xiàn)代敏捷開發(fā)方法的基礎(chǔ),使得PHPUnit成為許多大型PHP項(xiàng)目的關(guān)鍵工具。這個(gè)工具也可以被Xdebug擴(kuò)展用來生成代碼覆蓋率報(bào)告 ,并且可以與phing集成來自動(dòng)測試,最后它還可以和Selenium整合來完成大型的自動(dòng)化集成測試。
到此,相信大家對“PHP中PHPUnit的安裝和用法”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。